【juice-shop】★★★ GDPR Data Erasure:登录已删除的用户账户

通过 SQL 注入查询 sqlite_master 获取数据库结构,发现用户采用软删除机制,进而查询已删除用户信息,利用 SQL 注入登录已删除的 Chris 账户。

【juice-shop】★★★ GDPR Data Erasure:登录已删除的用户账户

0x01 任务简报

💡 提示 (Hints)
1. 实现用户"被遗忘的权利"在技术上和法律上都存在问题。
2. 尝试使用请求数据删除功能或许值得一试,但无法帮助实时解决此问题。
3. 若已解决"通过 SQL 注入获取所有用户凭证列表"挑战,或许已掌握 Juice Shop 如何应用户请求"删除"账户的相关信息。
4. Juice Shop 在此处的做法完全不符合《通用数据保护条例》(GDPR)。

0x02 实战:复现漏洞

💡 前置思路

提示暗示 Chris 用户表面上被删除了,但实际上可能仍能使用。这涉及数据库的**软删除(Soft Delete)**机制。

🔍 第一步:推断目标邮箱

先进行账号收集,我在商店的所有评论里面没有找到Chris用户的评论,只是尝试构造Chris的邮箱了

1
chris@juice-sh.op

尝试直接注入登录,但失败。

直接注入失败

📊 第二步:查询数据库结构

看来不行,得请神上身了(AI救我)

首先从 Database Schema 挑战搞来注入语句,查询 sqlite_master 表获取数据库结构:

1
1'))union+select+1,2,3,4,5,6,7,8,sql+from+sqlite_master--

数据库结构查询

分析返回的 SQL 定义,发现 Users 表包含 deletedAt 字段,这表明应用使用软删除机制:用户被"删除"时,只是将 deletedAt 字段设置为删除时间戳,而不是物理删除记录。

🔑 第三步:查询已删除用户

构造 SQL 注入语句,查询所有 deletedAt 不为空的用户(已删除用户):

1
1'))union+select+id,email,password,role,deletedAt,6,7,8,9+from+Users+where+deletedAt+is+not+null--

已删除用户查询

查询结果

成功获取已删除用户的邮箱、密码哈希和角色信息。

💉 第四步:登录已删除用户

从查询结果中获取 Chris 的真实邮箱:

1
chris.pike@juice-sh.op

既然已经拿到邮箱,那么直接使用注入进行登录

1
chris.pike@juice-sh.op'--

注入登录

✅ 第五步:完成挑战

成功登录已删除的 Chris 账户,挑战完成。

AI 真好用啊~

使用 Hugo 构建
主题 StackJimmy 设计