代码审计-class_exists

题目地址:

https://github.com/hongriSec/PHP-Audit-Labs/blob/master/Part1/Day3/files/README.md

主要为class_exists函数的实例化类名和参数由用户所控制,从而造成的文件读取漏洞

代码第17行,可以看到调用了class_exists函数,在第14行可以看到,class_exists传入的参数classname由用户输入的name、param、param2参数决定。

index.php

因此,可以利用class_exists函数调用php内置类GlobIterator,来进行文件搜索。

payload:name=GlobIterator¶m=./*.php¶m2=0

Globlterator类

调用SimpleXMLElement类利用xml格式来读取文件内容,这里要用base64的格式读取,因为文件中若存在 < > & ' " 符号,会导致xml读取错误。

payload:name=SimpleXMLElement¶m=]>%26xxe;¶m2=2

SimpleXMLElement类

总结:class_exists参数可控,则可以任意文件读取。

你可能感兴趣的:(代码审计-class_exists)