XXE 原理漏洞及小例题详解
1 什么是XXE漏洞
XXE漏洞全程XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取,命令执行 内网端口扫描 攻击内网网站 发起DOS攻击等危害
可以类比SQL注入解析传入SQL语句,解析XML语句
2 什么是XML
一种类似html的语句,不同于html,他的标签可以自定义
3 什么是DTD
Document Type Definition 文档类型定义
一般和XML文件配合使用,用来约束XML文件
3.1内部DTD文档
<!DOCTYPE 根元素 [定义内容]>
3.2外部DTD文档
引入外部的DTD文件分为两种:
(1)当引用的DTD文件是本地文件时,用SYSTEM标识,并写上 “DTD的文件路径”,如下
<!DOCTYPE 根元素 SYSTEM"DTD文件路径">
(2)当引用的DTD文件是一个公共的文件时,采用PUBLIC标识,如下
<!DECTYPE 根元素 PUBLIC "DTD名称""DTD文件的URL">
例子:
看这段代码
第四行如果是TURE 就禁止外部实体注入,如果如图一样是FALSE 则可以进行
第五行提交个POST请求
这是一个正常的提交,在看一个不正常的
多加了:
<!DOCTYPE xxe SYSTEM "xxe.dtd">
<div>&xxe;</div>
意思是将注入的文件 xxe.dtd显示出来,有点类似于文件包含
如果我们把xxe.dtd换成重要的文件如/etc/passwd,则会造成泄露
我们如果将其换成
<!DECTYPE xxe PUBLIC "http://www.xx.com/a.txt">
<div>&xxe</div>
如果这个网站地址不存在这个文件就能会报错 ,换成端口也类似如:
<?!DECTYPE xxe PUBLIC "http:/locahost.com:">
<div>&xxe</div>
我们可以利用这个特性进行内网扫描