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注入较为少见,修复也是比较简单的事,只需将预定义字符进行转义即可

预定义字符 转义后的预定义字符
< &lt;
> &gt;
& &amp;
' &apos;
" &quot;
posted @   SD_ZYL  阅读(374)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示