XML外部实体注入

admin 2025年2月11日14:14:48评论36 views字数 1468阅读4分53秒阅读模式
XML外部实体注入
01
定义

XML外部实体注入(XML External Entity,XXE)漏洞是一种基于XML数据解析的严重安全漏洞,允许攻击者通过操纵XML输入干扰应用程序的逻辑、窃取敏感数据甚至控制服务器。

02
原理

XML实体基础

XML(可扩展标记语言)通过实体(Entity)机制实现数据的复用,实体分为:

  • 内部实体:定义在文档内部的文本片段

    <!ENTITY example "Hello World">

  • 外部实体:引用外部资源(文件/URL/网络服务)

    <!ENTITY xxe SYSTEM "file:///etc/passwd">

  • 参数实体(DTD内部使用,以%开头)

    <!ENTITY % param_entity "恶意内容">

DTD(文档类型定义)

DTD是 XML 的早期模式定义语言,允许声明实体和文档结构。

XXE 的核心在于攻击者劫持DTD的实体解析过程

<!DOCTYPE attack [

<!ENTITY xxe SYSTEM "file:///etc/passwd">

]>

<data>&xxe;</data>

当XML解析器处理此文档时,会读取 /etc/passwd 的内容并替换 &xxe;。

03
漏洞触发条件
应用程序接受用户提供的 XML 输入。

XML解析器启用外部实体解析(默认配置下如PHP的SimpleXML、Java的 SAXParser)。

解析结果可被攻击者查看(直接回显、错误日志、带外通信等)。

04
攻击场景

通过file://协议读取服务器本地文件:

<!DOCTYPE data [

<!ENTITY file SYSTEM "file:///etc/passwd">

]>

<user>&file;</user>

利用XML解析器发起网络请求,探测内网服务:

<!DOCTYPE data [

<!ENTITY ssrf SYSTEM "http://192.168.1.1:8080/internal-api">

]>

<data>&ssrf;</data>

拒绝服务攻击(DoS)

通过实体扩展耗尽资源(如 "Billion Laughs" 攻击):

<!DOCTYPE data [

<!ENTITY lol "lol">

<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;">

<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;">

<!-- 递归定义直至内存耗尽 -->

]>

<data>&lol9;</data>

05
防护措施
禁用外部实体解析

  • Java:配置DocumentBuilderFactory。
  • Python:defusedxml库替代标准库。
  • PHP: 使用libxml_disable_entity_loader(true)。

输入过滤:

  • 移除XML中的<!DOCTYPE> <!ENTITY>声明。
  • 使用正则表达式黑名单过滤SYSTEM、PUBLIC等关键词。
使用安全替代格式:优先选择 JSON而非XML,使用JsonReader或JsonParser。

服务器端加固:限制XML解析器的网络访问权限(防火墙规则)。

安全编码实践:避免直接拼接用户输入到XML文档。

06
真实案例

PayPal 2013:通过XXE读取服务器配置,获取加密密钥。

Facebook 2014:利用SVG图片上传功能触发XXE,读取内部文件。

CVE-2019-6447:ES文件浏览器漏洞导致数亿用户数据泄露。

07
互动问题
Q:攻击者如何利用XXE漏洞进行攻击?

Q:有哪些典型的XXE漏洞案例?

08
下期预告
《网安60秒丨CORS》

原文始发于微信公众号(小白学安全):网安60秒丨XML外部实体注入

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月11日14:14:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XML外部实体注入https://cn-sec.com/archives/3725536.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息