# 【juice-shop】★★★ Client-side XSS Protection：绕过客户端防护实施存储型 XSS


# 【juice-shop】★★★ Client-side XSS Protection：绕过客户端防护实施存储型 XSS

## 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. 绕过客户端安全通常可通过两种方式实现：在客户端禁用安全机制（例如通过操作 DOM 树），或完全忽略安全机制而直接与后端交互。
</blockquote>

---

## 0x02 实战：复现漏洞

> 这题我愿将其称为闪击管理员（

### 🔍 第一步：抓取注册请求

打开 Burp Suite，进行一次正常的用户注册，捕获注册请求包。

![正常注册请求](../../../../../../public/p/juice-shop-client-side-xss-protection绕过客户端防护实施存储型-xss/assets/Pastedimage20260408111357.png)

### 💉 第二步：将 XSS 有效负载注入 email 字段

将请求发送到 Repeater，把 `email` 字段的值替换为 XSS 有效负载：

```html
<iframe src='javascript:alert(`xss`)'>
```

> 前端对 email 字段有格式校验，但直接与后端交互可以绕过客户端的验证限制。

![注入 XSS 有效负载](../../../../../../public/p/juice-shop-client-side-xss-protection绕过客户端防护实施存储型-xss/assets/Pastedimage20260408111701.png)

发送请求，成功创建含有 XSS 有效负载的新用户。

### 🔑 第三步：以管理员身份验证效果

我们看看管理员那边发生了什么，使用 SQL 注入快速登录管理员账户，访问管理后台：

```
http://127.0.0.1:3000/#/administration
```

![管理员登录](../../../../../../public/p/juice-shop-client-side-xss-protection绕过客户端防护实施存储型-xss/assets/Pastedimage20260408111937.png)

### 💥 第四步：触发 XSS

管理员访问用户管理页面时，XSS 弹窗立即触发。翻页至含有恶意 email 的用户时再次弹窗，硬控管理员数秒。

![XSS 弹窗触发](../../../../../../public/p/juice-shop-client-side-xss-protection绕过客户端防护实施存储型-xss/assets/Pastedimage20260408112039.png)

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

存储型 XSS 成功触发，挑战完成。

---

## 参考资料

- https://pwning.owasp-juice.shop/companion-guide/latest/appendix/solutions.html#_perform_a_persisted_xss_attack_bypassing_a_client_side_security_mechanism

