从业者-隐藏攻击面-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)