「 典型安全漏洞系列 」05.XML外部实体注入XXE详解

1. XXE简介

XXE(XML external entity injection,XML外部实体注入)是一种web安全漏洞,允许攻击者干扰应用程序对XML数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。

在某些情况下,攻击者可以利用XXE漏洞执行服务器端请求伪造(SSRF)攻击【dss】,从而升级XXE攻击,从而危害底层服务器或其他后端基础设施。

在这里插入图片描述

1.1. XML介绍

可扩展标记语言(Extensible Markup Language,XML)包含两点:

  • 标记:指计算机能理解的信息符号(标签),通过这些标签,计算机之间可以处理包含各种信息的HTML、文章等;
  • 可扩展性:使用者可以根据需要自行定义标签。

下面是一个包含XML声明、文档类型定义(Document Type Definition,DTD)的XML文件样例。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ELEMENT root (element1, element2)><!ELEMENT element1 (#PCDATA)><!ELEMENT element2 (#PCDATA)>
]><root><element1>Value 1</element1><element2>Value 2</element2><attribute name="attr1">Value A</attribute>
</root>

Note:DTD用于定论XML文档的结构,它作为XML文件的一部分位于XML声明和文档元素(样例中<root>节点下的元素)之间。

外部实体语法格式为:<!ENTITY 实体名 SYSTEM "URL/URI",这里的URL可以使用file://协议,因此可以从XML文件中加载外部实体。

2. 攻击原理

一些应用程序使用XML格式在浏览器和服务器之间传输数据。这样做的应用程序实际上总是使用标准库或平台API来处理服务器上的XML数据。XXE漏洞的出现是因为XML规范包含各种潜在的危险功能,而标准解析器支持这些功能,即使应用程序通常不使用这些功能

XML外部实体是一种自定义XML实体,其定义的值是从声明它们的DTD外部加载的。从安全角度来看,外部实体特别有趣,因为它们允许根据文件路径或URL的内容定义实体。

3. 攻击思路

攻击者通常首先扫描目标系统,寻找存在安全漏洞的XML文档。然后,构造恶意的外部实体引用,并将其插入到目标XML文档中。最后,通过发送带有恶意实体引用的XML文档给目标系统的用户,诱使用户打开这个文档,从而实现远程代码执行或本地文件读取等攻击目的。

4. 防御方法

  • 使用开发语言提供的禁用外部实体的方法:实际上,所有XXE漏洞都是由于应用程序的XML解析库支持应用程序不需要或不打算使用的潜在危险的XML功能而产生的。防止XXE攻击的最简单、最有效的方法是禁用这些功能;
  • 输入过滤:过滤用户提交的XML数据,关键词<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC

Note:通常,禁用外部实体的解析和禁用对XInclude的支持就足够了。这通常可以通过配置选项或通过编程重写默认行为来完成。有关如何禁用不必要的功能的详细信息,请参阅XML解析库或API的文档。

5. 攻击案例

5.1. 环境介绍

攻击者利用XXE漏洞,通过回显获取系统敏感信息,环境地址:https://portswigger.net/web-security/xxe/lab-exploiting-xxe-to-retrieve-files

5.2. 攻击细节

1、发现请求参数包含XML格式数据
访问产品页面,单击“检查库存”,并在Burp Suite中拦截生成的POST请求,截图如下
在这里插入图片描述

2、检测XML是否被解析及是否支持DTD引用外部实体,有回显或者报错
首先在XML声明和stockCheck元素之间插入以下外部实体定义:<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>,然后将productId编号替换为对外部实体的引用:&xxe;。响应应包含“Invalid product ID:”,后跟/etc/passwd文件的内容。
在这里插入图片描述
完整的payload如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]><stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>

6. 参考

[1] https://portswigger.net/web-security/xxe


前期回顾
「 典型安全漏洞系列 」04.服务器端请求伪造SSRF详解
「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解
「 典型安全漏洞系列 」02.SQL注入详解
「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639128.shtml

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

相关文章

【ARM 嵌入式 编译系列 3.6 -- 删除lib中的某个文件】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 删除lib中的某个文件 删除lib中的某个文件 比如&#xff0c;如果要删除 libc.a 静态库中的特定对象文件并重新使用这个静态库&#xff0c;在终端中可以使用 ar 命令。ar 是一个归档工具&#xff0c;它可以创建…

【Unity小技巧】3D人物移动脚步和跳跃下落音效控制

文章目录 单脚步声多脚步声&#xff0c;跳跃落地音效播放不同材质的多脚步声完结 单脚步声 public AudioClip walkingSound; public AudioClip runningSound;//移动音效 public void MoveSound() {// 如果在地面上并且移动长度大于0.9if (isGround && moveDirection.s…

动物免疫(羊驼免疫)-泰克生物

在过去几十年里&#xff0c;抗体研究和应用的领域已经经历了革命性的变化。在这个进程中&#xff0c;一种特殊来源的抗体 —— 来自骆驼科动物&#xff08;包括羊驼&#xff09;的单链抗体&#xff08;也称纳米抗体&#xff09;引起了全球科学家的广泛关注。 羊驼等骆驼科动物…

Java NIO (四)NIO Selector类

1 选择器与注册 选择器是什么&#xff1f;选择器和通道关系是什么&#xff1f; 简单的说&#xff0c;选择器的使用是完成IO的多路复用&#xff0c;其主要工作是通道的注册、监听、事件查询。一个通道代表一条连接通路&#xff0c;通过选择器可以同时监听多个通道的IO(输入输出)…

长拖尾数据的采样方法

以下内容来自于ChatGPT长拖尾数据的采样方式&#xff1a; 对于具有长拖尾&#xff08;长尾&#xff09;分布的数据&#xff0c;通常使用传统的随机抽样方法可能不太适用&#xff0c;因为这样的分布意味着有一些极端值&#xff08;outliers&#xff09;会对整体分布产生较大影响…

【Linux】python版本控制和环境管理

文章目录 1.查看目前python的版本2.添加软件源并更新3.选择你想要下载的版本4.警示&#xff1a;没必要设置默认版本误区千万千万不要覆盖python3软链接解决办法 5.pip软件包管理最省心稍微麻烦换源 网上有很多教程都是教导小白去官方下载之后编译安装。但是&#xff0c;小白连c…

4.go 基础类型及类型转换

目录 概述basic types总结例子 Zero values总结例子 类型转换总结例子 结束 概述 go 版本&#xff1a; go1.20.13 basic types 总结 基本类型如下&#xff1a; boolstringint int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptrbyte // alias for uint8…

[pytorch入门] 2. tensorboard

tensorboard简介 TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中.但是也可以独立安装&#xff0c;服务Pytorch等其他的框架 可以常常用来观察训练过程中每一阶段如何输出的 安装pip install tensorboard启动tensorboard --logdir<d…

蓝桥杯理历年真题 —— 数学

1. 买不到的数目 这道题目&#xff0c;考得就是一个日常数学的积累&#xff0c;如果你学过这个公式的话&#xff0c;就是一道非常简单的输出问题&#xff1b;可是如果没学过&#xff0c;就非常吃亏&#xff0c;在考场上只能暴力求解&#xff0c;或是寻找规律。这就要求我们什么…

Python图像处理【19】基于霍夫变换的目标检测

基于霍夫变换的目标检测 0. 前言1. 使用圆形霍夫变换统计图像中圆形对象2. 使用渐进概率霍夫变换检测直线2.1 渐进霍夫变换原理2.2 直线检测 3. 使用广义霍夫变换检测任意形状的对象3.1 广义霍夫变换原理3.2 检测自定义形状 小结系列链接 0. 前言 霍夫变换 (Hough Transform,…

H5112C PWM调光 无频闪 高性价比 支持12V 24V 36V 48V 60V 72V 内置MOS

PWM调光芯片是一种常用于LED调光控制的芯片&#xff0c;其工作原理如下&#xff1a; 脉冲宽度调制&#xff08;PWM&#xff09;&#xff1a;PWM是一种调制技术&#xff0c;通过改变信号的脉冲宽度来控制输出信号的平均功率。在PWM调光中&#xff0c;芯片会以一定的频率产生一系…

SpringCloud Alibaba 深入源码 - Nacos 和 Eureka 的区别(健康检测、服务的拉取和订阅)

目录 一、Nacos 和 Eureka 的区别 1.1、以 Nacos 注册流程来解析区别 一、Nacos 和 Eureka 的区别 1.1、以 Nacos 注册流程来解析区别 a&#xff09;首先&#xff0c;我们的服务启动时。都会把自己的信息提交给注册中心&#xff0c;然后注册中心就会把信息保存下来. 注册的…

Midjourney常见参数列表(极速版)

前言 参数是添加到提示词末尾的选项&#xff0c;可以改变图片的生成方式。参数可以改变图片的长宽比&#xff08;Aspect Ratios&#xff09;&#xff0c;切换不同的Midjourney模型版本&#xff08;Model Versions&#xff09;&#xff0c;改变使用的放大器&#xff08;Upscaler…

Leetcode 3016. Minimum Number of Pushes to Type Word II

Leetcode 3016. Minimum Number of Pushes to Type Word II 1. 解题思路2. 代码实现 题目链接&#xff1a;3016. Minimum Number of Pushes to Type Word II 1. 解题思路 这道题的话思路其实还是蛮简单的&#xff0c;显然我们的目的是要令对给定的word在键盘上敲击的次数最小…

ELK日志分析

目录 一、ELK概述 &#xff08;一&#xff09;ELK的定义 &#xff08;二&#xff09;ELK工具 1.ElasticSearch 2.Kiabana 3.Logstash &#xff08;1&#xff09;定义 &#xff08;2&#xff09;插件 ① input ② filter ③ output &#xff08;三&#xff09;可以添…

Spring、Spring-MVC、Mybatis、Mybatis-generator整合核心配置文件记录

Spring、Spring-MVC、Mybatis、Mybatis-generator整合核心配置文件记录 文章目录 Spring、Spring-MVC、Mybatis、Mybatis-generator整合核心配置文件记录1. spring.xml2. spring-mvc.xml3. mybatis-config.xml4. mybaits-generator.xml5. ehcach.xml6. web.xml Spring、Spring-…

快速排序(三)——hoare法

目录 ​一.前言 二.快速排序 hoare排法​ 三.结语 一.前言 本文给大家带来的是快速排序&#xff0c;快速排序是一种很强大的排序方法&#xff0c;相信大家在学习完后一定会有所收获。 码字不易&#xff0c;希望大家多多支持我呀&#xff01;&#xff08;三连&#xff0b;关…

Spring Boot3整合Druid(监控功能)

目录 1.前置条件 2.导依赖 错误依赖&#xff1a; 正确依赖&#xff1a; 3.配置 1.前置条件 已经初始化好一个spring boot项目且版本为3X&#xff0c;项目可正常启动。 作者版本为3.2.2最新版 2.导依赖 错误依赖&#xff1a; 这个依赖对于spring boot 3的支持不够&#…

微服务架构弹性伸缩策略方案

微服务架构的弹性伸缩策略是确保系统能够在不同工作负载下高效运行的关键。通过巧妙的策略&#xff0c;可以实现对每个微服务的独立伸缩&#xff0c;提高系统的灵活性和性能。本文将深入探讨微服务架构下的弹性伸缩方案。 1. 独立微服务的弹性伸缩 微服务架构的核心思想是将应…

用go语言删除重复文件

用go语言删除重复文件 文章目录 用go语言删除重复文件需求&#xff1a;将同级别目录&#xff08;只有一层的目录&#xff0c;没子目录&#xff09;下的重复文件删除打包成exe文件使用 需求&#xff1a;将同级别目录&#xff08;只有一层的目录&#xff0c;没子目录&#xff09;…