XXE漏洞
XXE漏洞
XXE漏洞全程为XML External Entity Injection即XML外部实体注入漏洞。
XML介绍及用途
XML被用来传输和存储数据。XML文档形成了一种树状结构,从根部开始,扩招到枝叶。
XML允许作者定义自己的标签和自己的文档结构。
xml文档的构建模块
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
- 元素
- 属性
- 实体
- PCDATA
- CDATA
1. 元素
元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。实例:
1 | <body>body text in between</body> |
空的 HTML 元素的例子是 “hr”、”br” 以及 “img”。
2. 属性
属性可提供有关元素的额外信息 实例:
1 | <img src="computer.gif" /> |
3. 实体
实体是用来定义普通文本的变量。实体引用是对实体的引用。
4. PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
5. CDATA
CDATA 的意思是字符数据(character data)。CDATA 是不会被解析器解析的文本。
存在XXE漏洞代码
1 | <?php |
漏洞利用
一.有回显XXE漏洞利用
1.读取文档文件
1 | <?xml version="1.0" encoding="utf-8"?> |
2.读取php文件
1 | <?xml version="1.0" encoding="utf-8"?> |
XXE漏洞的危害
1.读取任意文件
1 | <?xml version = "1.0"?> <!DOCTYPE |
2.执行系统命令
3.探测内网存活主机
1 | <?xml version="1.0"?> |
如何防御xxe攻击
1. 使用开发语言提供的禁用外部实体的方法
1 | PHP: |
2. 过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC
以下防御方法来自齐安信攻防社区
为了防止XXE攻击,我们需要采取以下措施:
- 输入验证:在解析XML之前,应该对输入数据进行充分验证。例如,可以使用白名单来验证输入是否合法,或者禁止用户输入实体引用等危险字符。
- 使用安全的XML解析器:一些XML解析器可能存在XXE漏洞,因此应该选择使用安全性较好的XML解析器。例如,PHP SimpleXML默认禁用外部实体,因此可以减少XXE漏洞的风险。
- 禁止使用DTD:DTD(Document Type Definition)是一种定义XML文档结构的语言,但它也可以用于定义实体。因此,应该尽量避免使用DTD或限制其使用。
- 使用CDATA:CDATA是XML文档中的一种特殊字符序列,它可以使文本数据被解释为纯文本而不是标记。如果我们需要在XML文档中插入敏感数据,例如密码等,可以使用CDATA以防止数据被误解析。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hexo!


