# 【juice-shop】★ Bonus Payload：漏洞的声音

# 【juice-shop】★ Bonus Payload：漏洞的声音

> 这是 DOM XSS 挑战的一个趣味“番外篇”。如果你已经搞定了基础的弹窗挑战，这一关会让你听到漏洞的声音。

-----

## 0x00 前置要求 (Prerequisites)

在开始本关之前，请确保你已经准备就绪：

  - [ ] **【juice-shop】★ DOM XSS**：已掌握搜索框回显的基本原理。
  - [ ] **运行环境**：确认 Juice Shop 容器处于运行状态。
  - [ ] **网络状态**：Payload 引用了外部资源，**需开启科学上网**才能加载音频流。

-----

## 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.  确保你已经解决了 <strong>“执行 DOM XSS 攻击”</strong> 挑战。<br>
2.  将新的 Payload 复制粘贴到 <strong>相同的</strong> 易受攻击字段中。<br>
3.  <strong>⚠️ 提交前请调大电脑音量！🔊</strong>
    </blockquote>

-----

## 0x02 实战引导

<blockquote style="border-left: 5px solid #0366d6; background-color: #f1f8ff; padding: 20px; margin: 1.5rem 0; color: #0550ae; 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> 操作指南 (Walkthrough)
</div>
• 本关只是在<strong>搜索栏</strong>换个更有趣的 Payload。<br>
• <strong>动作</strong>：将下方的代码填入搜索框。<br>
• <strong>注意</strong>：确认扬声器音量已拉满，然后按下 <strong>Enter</strong>。
</blockquote>

-----

## 0x03 准备武器 (Payload)

这是从计分板直接复制的“音乐注入”代码，它利用 `<iframe>` 加载了一个带自动播放功能的 SoundCloud 播放器：

```js
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/771984076&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>
```

-----

## 0x04 漏洞复现

和之前的 DOM XSS 操作完全一致。在搜索框中粘贴 Payload 并执行：

![](../../../../../../public/p/juice-shop-bonus-payload漏洞的声音/assets/Pastedimage20260328220609.png)

注入成功后，页面会嵌入播放器并自动播放音频：

![](../../../../../../public/p/juice-shop-bonus-payload漏洞的声音/assets/Pastedimage20260328220800.png)

-----

## 0x05 为什么这能成功？

  * **原理一致**：依然是利用了之前发现的 **DOM XSS** 漏洞点。
  * **不只是弹窗**：XSS 的威力远超 `alert()`。通过注入 `<iframe>`，攻击者可以强行在用户浏览器里加载任何第三方内容，如自动播放的音频、钓鱼表单或恶意广告。
  * **关键属性**：注意代码中的 `allow="autoplay"`，这是绕过浏览器策略、让注入内容自动发出声音的关键权限。

-----

## 0x06 编码挑战 (Coding Challenge)

### 🔍 找到它 (Find It)

漏洞依然在 **第 6 行**：

![](../../../../../../public/p/juice-shop-bonus-payload漏洞的声音/assets/Pastedimage20260328220901.png)

### 🛠️ 修复它 (Fix It)

![](../../../../../../public/p/juice-shop-bonus-payload漏洞的声音/assets/Pastedimage20260328221819.png)

> **原理回顾**：由于这里直接使用了 `bypassSecurityTrustHtml`，导致 Angular 信任并渲染了恶意的 `<iframe>` 标签。修复方案与 DOM XSS 篇一致：**删除该函数，让 Angular 默认执行转义处理。**

-----

### 💡 极简总结 (Scan-Friendly)

  * **目标**：老位置（搜索框）。
  * **手段**：粘贴复杂的 `<iframe>` 代码。
  * **效果**：回车，让漏洞“唱”起来。

