同样是因为在校赛遇到了有关php反序列化原生类的文章,所以我写下了这篇文章。

php原生类分为多种,如下。

利用Error类和Exception类来实现xss漏洞。

Error类是在php7下存在的一个内置类,是所有PHP内部错误类的基类,那这和XSS和什么关系呢?那是因为这个类中有一个内置方法,叫做__toString()的魔术方法,我们都知道当把对象当成字符串的时候它就会自动调用这个方法,而它会将Error以字符串的形式表达出来;那么假如有一个echo将它输出出来,而输出内容是我们是我们可以控制的,那我们就可以用<script>标签来执行js代码了

示例

我们可以看到其程序运行结果出现了xss漏洞。这是因为其__toString方法直接将Error中的字符串输出到了浏览器中导致的。
注意经过反序列化之后的在被输出时也会输出其定义的字符串。

遍历文件目录类

我们可以使用一下几种原生类对文件进行遍历

1
2
3
DirectoryIterator 
FilesystemIterator
GlobIterator

上面三种原生类的功能相差不多都可以对目录进行遍历,当toString被触发时都会输出当前文件夹的第一文件名。一般会以遍历的形式出现在ctf赛题中。
在遍历时会输出该目录下的所有文件名如下
1
2
3
$a=new FilesystemIterator("/");
foreach ($a as $b)
echo ($b.'<br>');


未遍历时只会输出一个文件名。

文件读取类

SplFileObject

这个原生类可以对文件进行读取其使用方法仍然是触发__toString

1
2
$a=new SplFileObject('/app_config.txt');
echo ($a.'<br>');

像这样我们就可以触发SplFileObject输出文件内容
注意SplFileObject等原生类都需先实例化为对象再进行触发才能触发成功。

SoapClient 类

这个类可以触发SSRF由于我对SSRF不是特别了解所以先挖个坑以后再填。