【juice-shop】★★★★ User Credentials:通过 SQL 注入获取所有用户凭据
任务简报
🎯 挑战目标通过 SQL 注入获取所有用户凭据列表。
## 实战:复现漏洞💡 官方提示 (Hints)1. 收集关于储存用户数据的地点和如何处理的信息,然后制作一个相应的 UNION SELECT 攻击。
2. 尝试找到一个端点,使你能够影响从服务器检索的数据。
3. 构造一个 UNION SELECT 攻击字符串,将另一张表中的数据加入到原始结果中。
4. 你可能需要逐步解决一些查询语法问题,基本上是从一个错误跳到下一个错误。
5. 如同"订购 2014 年圣诞特惠套餐"和"通过 SQL 注入窃取整个数据库模式定义",这些操作无法通过应用程序前端实现。
步骤1:发现注入点
目标接口为商品搜索 API,通过首页搜索功能获取请求包:
|
|
验证注入点:
|
|
结果: 返回错误,确认存在 SQL 注入漏洞。
步骤2:确定列数
使用 ORDER BY 逐步增加列数,直到出现错误:
|
|
结果: 确认查询结果共有 9 列。
步骤3:使用 SQLMap 获取数据库结构
第一步:保存请求包
将请求保存到 request.txt 文件:
|
|
第二步:列出所有表
|
|

第三步:列出 Users 表的列
|
|

步骤4:确定显示位置
构造 UNION SELECT 测试每列的显示位置:
|
|
URL 编码格式:
|
|
结果: 确认各列的显示位置。

步骤5:提取所有用户凭据
构造最终的注入 Payload,使用 -1 让正常查询结果不显示:
|
|
URL 编码格式:
|
|
Payload 说明:
| 部分 | 说明 |
|---|---|
-1 |
让原始查询返回空结果(不存在 ID 为 -1 的商品) |
UNION SELECT |
将 Users 表数据附加到结果中 |
id, email, password |
提取用户 ID、邮箱和密码哈希 |
'4','5','6','7','8','9' |
填充剩余列(占位符) |
FROM Users |
数据来源表 |
-- |
注释掉后续 SQL 代码 |
结果: 成功获取所有用户的邮箱和密码哈希!

挑战完成! 🎉