从业者-隐藏攻击面-XInclude攻击
# 实验室:利用XInclude检索文件
# 题目
此实验室具有一个 “Check stock(库存检查)” 功能,它会将用户输入的数据嵌入到服务端 XML 文档中,随后对该文档进行解析。
由于你无法控制整个 XML 文档,因此无法定义 DTD 来发起经典的 XXE 攻击。
若要解决实验室问题,请注入XInclude语句并检索/etc/passwd文件的内容。
提示
默认情况下,XInclude会把引入的目标文档解析为 XML。但由于/etc/passwd不是有效的 XML 格式,因此你需要向XInclude指令添加一个额外的属性来更改此行为。
(译者加:如果把/etc/passwd当作 XML 来处理的话会出现 “解析错误” ,所以要添加一个额外的属性,将其当作 “普通文本” 来处理)
- name: 实验室-从业者
desc: 利用XInclude检索文件 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/xxe/lab-xinclude-attack
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
来到首页,点击任意商品下方的 “View details” 进入详情页。
在商品详情页的下方,可以看到一个库存检查功能。
启用浏览器代理,然后点击 “Check stock” 检查库存。
将请求数据包转发至 Repeater 功能模块。
这次的请求数据包有所不同,其中并没有携带 XML 格式的数据,而是普通的 POST 传参。
尝试污染两个参数,其中productId参数可以触发错误消息,具有回显。
根据所学的理论知识,构造 XInclude 攻击载荷,添加到 productId 参数当中。
xmlns用于加载 XInclude 功能模块,并将其命名为xi。- 然后使用该模块,加载
/etc/passwd的文件内容。 - 注意,由于目标文件是 “非XML格式”,加载时会出现错误,所以要添加一个属性
parse="text",将其当作普通文本来处理。
<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="file:///etc/passwd" parse="text"/>
</foo>
1
2
3
2
3
XInclude 攻击成功触发,程序返回了对应的文件内容。
回到浏览器页面,实验已完成。

编辑 (opens new window)