XML外部实体(XXE)注入漏洞
XML外部实体(XXE)注入漏洞
XML
简介
XML 指可扩展标记语言(eXtensible Markup Language),是一种用于标记电子文件使其具有结构性的标记语言,被设计用来传输和存储数据。
构建模块
- 元素 元素是XML以及 HTML文档的主要构建模块,元素可包含文本、其他元素或者为空。
- 属性 属性可提供有关元素的额外信息,属性总是被置于某元素的开始标签中。例如:<imgsrc="pinginglab.gif">,其中img为元素名,src为属性。
- 实体 实体是用来定义普通文本的变量。
- PCDATA PCDATA 的意思是被解析的字符数据(parsed character data) PCDATA是会被解析器解析的文本,这些文本将被解析器检查实体以及标记。
- DATA DATA的意思是字符数据(character data )。CDATA是不会被解析器解析的文本。
基本语法
XML 文档在开头有 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
的结构,这种结构被称为 XML prolog ,用于声明XML文档的版本和编码,是可选的,但是必须放在文档开头。
除了可选的开头外,XML 语法主要有以下的特性:
- 所有 XML 元素都须有关闭标签
- XML 标签对大小写敏感
- XML 必须正确地嵌套
- XML 文档必须有根元素
- XML 的属性值需要加引号
XML外部实体(XXE)注入
原理
当允许引用外部实体时,攻击者通过XML实体传递自己构造的恶意内容,发送给应用程序并执行
攻击方式
- 利用XXE来读取任意文件:定义一个包含文件内容的外部实体,并在应用程序的响应包中返回其内容
- 利用XXE来执行SSRF 攻击:根据后端系统的URL定义外部实体
- 利用XXE盲注带外数据泄露:敏感数据从应用服务器传输到攻击者控制的系统
- 利用XXE盲注通过报错信息来读取数据:通过触发XML解析错误,在返回的错误消息中包含敏感数据
危害
- 任意文件读取
- 执行系统命令
- 探测内网端口
- 攻击内网网站
- 发起DOS攻击
漏洞修复方法
XXE注入较为少见,修复也是比较简单的事,只需将预定义字符进行转义即可
预定义字符 | 转义后的预定义字符 |
---|---|
< | < |
> | > |
& | & |
' | ' |
" | " |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义