前言:
XXE Injection即XML External Entity Injection也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进⾏行处理时引发的安全问题.
XML相关名词科普:
HTML与XML得区别:
与HTML不同的是XML可以自定义标签。 HTML就是简单的制作网页的代码,而XML具有此三个功效:1.数据存储 2.数据传输 3.数据共享DTD是什么意思? DTD即文档类型定义(Document Type Definition)DTD是什么? 你可以把数据库表结构理解为DTD文档,数据结构理解为XML。DTD是干嘛的? 验证XML文件编写的合法性,也就是一个约束,要求你只能按DTD定义的格式写。About Dtd Link of w3cschool:
XML基础知识
目前为止所知所能利用的XXE漏洞大概有一下四种:
1.任意文件读取 2.DDOS 3.SSRF 4.XXE注入
一:任意文件读取
来看一个正常的xml
<!xml version="1.0" encoding="utf-8">
<!doctype def SYSTEM “xishaonian.dtd”>
<root>
<name></name>
<age>16</age>
</root>
XML在包含DTD文件的时候是使用以下语句来进行包含的
<!DOCTYPE def SYSTEM "myClass.dtd"> //可以理解为读取myClass.dtd这个文件的内容然乎赋值给def这个变量。
读取的时候不让他去读取dtd文件而是让她取读系统内部的文件,如此便造成了任意文件读取
如:
<!DOCTYPE def SYSTEM "file://etc/password/">
二: XXE注入
由于不会java所以可能就只是原理性的讲解一下。就不结合代码去讲解了。
XML可以理解为一个小型数据库,那么势必需要利用到类似sql语句之类的去对数据库进行增删改查。而在XXE当中是使用序列化去写反序列化去读的一个过程。那么如此反序列化只要一有注入就可以达到命令执行的效果。也就是说XML注入就是反序列化漏洞,也就是命令执行。
三:DDOS
]>&lol9;
四:SSRF
和任意文件读取类似,将dtd文件改为内网ip:端口 如此去探测内网端口的开放情况。该知识点还在拓展中。
参考文献: