XXE(XML外部实体注入)漏洞

XXE:“xml external entity injection”

漏洞原理

XXE(XMLExternal Entity Injection)也就是XML外部实体注入,XXE漏洞发生在应用程序解析XML输入时,XML文件的解析依赖libxml库,而libxml2.9以前的版本默认支持并开启了对外部实体的引用,服务端解析用户提交的XML文件时,未对XML文件引用的外部实体(含外部一般实体和外部参数实体)做合适的处理,并且实体的URL支持file://和ftp://等协议,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。
XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

XML概念:
XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点很像HTML语言。
但是XML和HTML有明显区别如下:

XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。

xml结构:
第一部分:XML声明部分


第二部分:文档类型定义 DTD

<!DOCTYPE note[ 

]>

第三部分:文档元素

<note>
<to>Daveto>
<from>Tomfrom>
<head>Reminderhead>
<body>You are a good manbody>
note>

其中,DTD(Document Type Definition,文档类型定义),用来为 XML 文档定义语法约束,可以是内部申明也可以使引用外部DTD。

XML中对数据的引用称为实体,实体中有一类叫外部实体,用来引入外部资源,有SYSTEM和PUBLIC两个关键字,表示实体来自本地计算机还是公共计算机,外部实体的引用可以借助各种协议,file:/// http:// php://

漏洞利用

使用pikachu 靶场进行测试。
XXE(XML外部实体注入)漏洞_第1张图片
我们构造payload



]>
<name>&a;name>

payload中&a;是用来将a这个实体进行调用,a实体成功在前端回显。
XXE(XML外部实体注入)漏洞_第2张图片
再构造使用访问文件的payload:



]>
<x>&b;x>

XXE(XML外部实体注入)漏洞_第3张图片
成功读取信息。

漏洞防御

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

相关文章:https://blog.csdn.net/u014029795/article/details/103143203

你可能感兴趣的:(Web漏洞,安全漏洞)