Lab: Exploiting XInclude to retrieve files 利用 XInclude 检索文件

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>

靶场

该实验室具有“检查库存”功能,该功能将用户输入嵌入服务器端 XML 文档中,随后对其进行解析。

因为您无法控制整个 XML 文档,所以您无法定义 DTD 来发起经典的XXE攻击。

要解决实验室问题,请注入一条XInclude语句来检索/etc/passwd文件的内容。

暗示
默认情况下,XInclude将尝试将包含的文档解析为 XML。由于/etc/passwd不是有效的 XML,您需要向XInclude指令添加额外的属性以更改此行为。

解决方案
访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
将productId参数值设置为:
<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>

image

posted @ 2021-08-26 15:26  Zeker62  阅读(123)  评论(0编辑  收藏  举报