浅谈XXE
2021-06-04
什么是XXE
XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。
什么是XML,DTD
一、XML概念:
XML
可扩展标记语言。
通常所说的XML,就是指XML数据解析,是将数据文档解析成不同的格式。因为不同平台(软件)在做数据传递或数据文档共享的时候,同一数据文档可能在不同平台的 显示格式要求不同,这就出现了相对中立的语言(XML),来表示数据,给二者做转化。
XML类似于HTML,不同的是HTML不可自定义标签,XML可以。
二、1、DTD概念:文档类型定义。DTD文件一般和XML文件配合使用,主要是为了约束XML文件。 ()DTD就是上文中提到的实体
2、DTD基本语法:<!ELEMENT NAME CONTENT>
其中
- ELEMENT是关键字,不可修改
- NAME表示元素名称
- CONTENT是元素类型,必须大写
(1)EMPTY————表示该元素不能包含子元素和文本,但可以有属性。
(2)ANY———表示该元素可以包含任何在该DTD中定义的元素内容
(3 )#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素
3、外部实体:1
2
3
4
5
6
7<?xml version="1.0"?>
<!DOCTYPE note SYSTEM <"note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body></note>如何判断XXE漏洞的存在

对其进行抓包
修改xml,添加任意标签观察是否存在回显
构造payload
一、实体打印二、文件读取1
2
3
4
5<?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY hacker "test">
]>
<name>&hacker;</name>1
2
3<?xml version = "1.0"?><!DOCTYPE ANY[
<!ENTITY f sYSTEM"file:///C://Windows//win.ini" >//前提是电脑中得有//
]><x>&f;</x>XXE漏洞利用
任意文件读取
探测内网地址
通过DTD窃取文件
远程代码执行