【juice-shop】★ Confidential Document:机密文件泄露

通过目录列表漏洞访问 /ftp 目录,发现并下载机密文件。

【juice-shop】★ Confidential Document:机密文件泄露

0x01 任务简报

💡 提示 (Hints)
  1. 分析和篡改应用程序中直接传递文件的链接。
  2. 您正在查找的文件没有任何保护措施。一旦找到它,您也可以访问它。

0x02 实战:复现漏洞

🔎 发现入口

在网站的 http://localhost:3000/#/about 页面中,发现了一个文件链接:

1
http://localhost:3000/ftp/legal.md

注意到 URL 中包含 /ftp/ 子目录,这暗示可能存在目录遍历漏洞。

About 页面中的文件链接

🚪 目录列表漏洞

尝试删除文件名,直接访问目录:

1
http://localhost:3000/ftp/

惊人的发现:服务器启用了目录列表功能,直接显示了 /ftp/ 目录下的所有文件!

目录列表漏洞:暴露所有文件

✅ 完成挑战

逐个访问或下载目录中的所有文件,即可找到机密文件并完成挑战。

目录内容详情


0x03 源码审计:编码挑战

🔍 找到它 (Find It)

漏洞位于第 2、3、4 行/ftp 路由直接使用 express.static() 提供静态文件服务,且未禁用目录列表,导致攻击者可以:

  1. 浏览目录内容
  2. 下载任意文件
  3. 发现敏感信息

漏洞代码:express.static(’/ftp’) 启用了目录列表

🛠️ 修复它 (Fix It)

选项 修复方式 安全评价 结论
Fix 1 删除单个文件的路由 ❌ 仍允许目录列表,攻击者可枚举所有文件 不完整
Fix 2 完全删除 /ftp 文件夹 ✅ 彻底消除漏洞,合法内容迁移到安全位置 真·修复
Fix 3 删除单个文件的路由 ❌ 同 Fix 1,目录列表仍存在 不完整
Fix 4 仅禁用目录列表 ⚠️ 阻止了目录浏览,但若攻击者知道文件名仍可下载 防守不足

Fix 2 才是正确答案的原因:

1
2
3
4
5
6
7
// ❌ 漏洞代码
app.use('/ftp', express.static('ftp'));  // 启用目录列表 + 文件下载

// ✅ 修复代码
// 1. 删除 /ftp 目录
// 2. 将合法的静态文件(如订单 PDF)移到受保护的位置
// 3. 实现访问控制(仅授权用户可下载)

三个选项的防护强度排序:

1
Fix 2(完全删除)> Fix 4(禁用列表)> Fix 1/3(删除路由)> 无防护(原始漏洞)

关键洞察:

  • 仅禁用目录列表(Fix 4)是"安全假象"——攻击者可通过字典攻击或其他方式猜测文件名
  • 完全删除不必要的目录(Fix 2)是最彻底的解决方案
  • 合法的文件(如订单 PDF)应该放在受鉴权保护的端点,而不是公开目录
使用 Hugo 构建
主题 StackJimmy 设计