XXE(XML外部实体注入)学习

XXE漏洞

XML外部实体注入(XML External Entity),简称 XXE 漏洞。

XML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

XML 文档结构包括 XML 声明、DTD文档类型定义、文档元素。

DTD (Document Type Definition,文档类型定义),用来为 XML 文档定义语法约束。

攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题。

即服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

一段常见的 XML 语法结构:
在这里插入图片描述
看起来有点像 HTML 语言,不过 XML 是用来传输和存储数据,HTML 是用来显示数据。

文档类型定义可以是内部声明也可以用外部 DTD。

内部声明 DTD 格式:<!DOCTYPE 根元素 [元素声明]>
引用外部 DTD 格式:<!DOCTYPE 根元素 SYSTEM "文件名">
内部声明实体格式:<!ENTITY 实体名称 "实体的值">
引用外部实体格式:<!ENTITY 实体名称 SYSTEM "URI">

在 DTD 中进行实体声明时,将使用 ENTITY 关键字来声明。
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
还有其他的一些关键字:

DOCTYPE (DTD 的声明)
SYSTEM 、PUBLIC (外部资源申请)

——
——

XXE漏洞的危害

文件读取
命令执行
内网端口扫描
攻击内网网站
发起 dos 攻击
……

——
——

XXE漏洞的修复

禁止使用外部实体,例如 libxml_disable_entity_loader(true) 。
过滤用户提交的 XML 数据,防止出现非法内容。

——
——

下面通过 pikachu 靶场对 XXE 漏洞进行简单的测试

XXE漏洞测试

打开界面,可以看到一个输入窗口,如果随便输入的话,会回显错误。
在这里插入图片描述

先尝试输入:

<?xml version="1.0"?>
<!DOCTYPE note [ <!ENTITY b  "text"> ]>
<name>&b;</name>

&b; 是用来将 b 这个实体进行调用,可以以看到 b 实体的内容 “text”成功在前端回显。( b 这个的名称是可以更改的)
在这里插入图片描述
再尝试用file协议读取本地文件 win.ini :

<?xml version="1.0"?>
<!DOCTYPE note [ <!ENTITY b  SYSTEM "file:///C:/Windows/win.ini"> ]>
<name>&b;</name>

可以看到,成功回显文件里的内容。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
XML外部实体注入漏洞(XML External Entity Injection, 简称XXE)是一种常见的安全漏洞,攻击者可以利用这种漏洞来读取任意文件、执行系统命令等操作。 在XML文档中,可以通过定义实体来引用外部资源,例如文件、URL等。当XML解析器解析XML文档时,如果不对外部实体进行限制,攻击者可以通过构造恶意的XML文档,将外部实体指向敏感文件或者恶意URL,从而导致漏洞。 具体来说,攻击者可以在XML文档中定义一个实体,使用DTD(Document Type Definition)语法将该实体指向一个外部文件,然后在XML文档中使用该实体。当XML解析器解析该实体时,就会将指定的外部文件读取进来,从而导致漏洞。 例如,下面的XML文档定义了一个名为“file”的实体,指向了一个敏感文件“/etc/passwd”: ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE message [ <!ELEMENT message (#PCDATA)> <!ENTITY file SYSTEM "file:///etc/passwd"> ]> <message>&file;</message> ``` 如果XML解析器不对外部实体进行限制,那么解析该文档时就会读取“/etc/passwd”文件的内容,并将其包含在<message>元素中返回给应用程序,从而导致敏感信息泄漏。 为了防止XXE漏洞,可以采取以下措施: 1. 禁止使用外部实体,或者限制外部实体的使用范围。可以在XML解析器中设置相关参数,例如禁止加载外部实体、禁止解析DTD等。 2. 对外部实体进行白名单过滤,只允许加载特定的URL或文件。 3. 检查输入数据,避免恶意输入注入XML文档中。 4. 对于持久化的XML数据,应该使用安全的XML库来处理,例如使用DOM4J或JAXB等库,这些库会自动过滤掉外部实体
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Goodric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值