# 【juice-shop】★★★★ Server-side XSS Protection：绕过服务端安全措施进行存储型 XSS 攻击

# 【juice-shop】★★★★ Server-side XSS Protection：绕过服务端安全措施进行存储型 XSS 攻击

<blockquote style="border-left: 5px solid #ff6b6b; background-color: #ffe0e0; padding: 20px; margin: 1.5rem 0; color: #c92a2a; 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> 挑战目标
</div>
使用 <code>&lt;iframe src="javascript:alert(`xss`)"&gt;</code> 代码绕过服务端安全措施进行存储型 XSS 攻击。
</blockquote>

<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. 攻击有效负载 <code>&lt;iframe src="javascript:alert(`xss`)"&gt;</code> 不会被任何验证器拒绝，但在持久化之前会被从评论中移除。<br>
4. 在您之前收集的 package.json.bak 文件中查找可能与输入处理相关的依赖项。<br>
5. 如果出现了 XSS 警告，但挑战在记分板上未显示为已解决，可能是您未能将精确的攻击字符串 <code>&lt;iframe src="javascript:alert(`xss`)"&gt;</code> 正确注入数据库。
</blockquote>

## 前置条件

 ### sanitize-html 库的漏洞

`sanitize-html` 是一个流行的 HTML 清理库，用于防止 XSS 攻击。但早期版本（如 1.4.2）存在一个严重漏洞：**非递归清理**。

**漏洞原理：**

```
输入: <<img src="csrf-attack"/>img src="csrf-attack"/>
第一次清理: <img src="csrf-attack"/>
（删除了第一个 <，但没有递归检查）
结果: 恶意标签仍然存在！
```

# 开始

### 第1步

首先，拿到`package.json.bak`，使用 Poison Null Byte 获取这个文件

```
http://127.0.0.1:3000/ftp/package.json.bak%2500.md
```

**工作原理：**
- `%25` = URL 编码的 `%`
- `%00` = URL 编码的空字节 `\0`
- `%2500` = 双重编码的空字节
- 服务器解码后：`package.json.bak\0.md`
- 文件系统在 `\0` 处截断，实际访问：`package.json.bak`

### 第2步

这个文件里面藏着一个存在漏洞的依赖 "sanitize-html": "1.4.2"，对于现状来说还是问ai的快，不过可能会有幻觉。

![](../../../../../../public/p/juice-shop-server-side-xss-protection绕过服务端安全措施进行存储型-xss-攻击/assets/Pastedimage20260416152815.png)

### 第3步

我们回到 客户反馈，输入题目给的xss，提交

![](../../../../../../public/p/juice-shop-server-side-xss-protection绕过服务端安全措施进行存储型-xss-攻击/assets/Pastedimage20260416154222.png)

完成挑战！

到关于我们页面验证，向右滑动到有这个白框的页面，等一会会出现弹窗

![](../../../../../../public/p/juice-shop-server-side-xss-protection绕过服务端安全措施进行存储型-xss-攻击/assets/Pastedimage20260416154457.png)

![](../../../../../../public/p/juice-shop-server-side-xss-protection绕过服务端安全措施进行存储型-xss-攻击/assets/Pastedimage20260416154441.png)


- [CNBLOGS - 博客](https://www.cnblogs.com/Hekeats-L/p/16974832.html)
- [OWASP Juice Shop 官方解决方案](https://pwning.owasp-juice.shop/companion-guide/latest/appendix/solutions.html#_perform_a_persisted_xss_attack_bypassing_a_server_side_security_mechanism)

