# 【juice-shop】★★ Reflected XSS：反射型跨站脚本攻击


# 【juice-shop】★★ Reflected 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. 查找一个 URL 参数，它的值出现在它指向的页面中。<br>
2. 尝试通过提交用 HTML 标签包裹的文本（在屏幕上容易被发现，例如 &lt;h1&gt; 或 &lt;strike&gt;）来探测跨站脚本漏洞。<br>
3. 有效负载：&lt;iframe src="javascript:alert('xss')"&gt;
</blockquote>

---

## 0x02 实战：复现漏洞

这篇的引导非常完整，我们就从引导来完成这个挑战。

### 🔑 前置条件：登录账户

需要登录才能进行挑战，随便注册登录一下，继续。

![注册页面](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402205825.png)

![登录成功](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402205903.png)

### 📍 第一步：进入保存的地址

点击导航栏中的"账户" → "订单和支付" → "我的保存地址"。

![订单和支付页面](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402210108.png)

![我的保存地址页面](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402210210.png)

### 🧪 第二步：尝试地址页面的 XSS

添加一个新地址，使用 `<iframe src="javascript:alert(`xss`)">` 作为城市名称提交。

> **值得学习的思路：我们应该怀疑任何一个可以输入的地方。**

![以 XSS 有效负载作为城市名称提交](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402210202.png)

然而，这里并没有触发 XSS，地址页面不存在该漏洞，需要换一个方向。

### 🛒 第三步：下单

将任意商品添加到购物车，完成购买流程：

添加购物车 → 结账 → 选择地址 → 选择送货速度 → 选择付款方式（信用卡或借记卡，随便填写卡信息）→ 下单并支付。

![添加购物车](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402212201.png)

![完成下单](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402212509.png)

![支付成功](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402212608.png)

### 🔍 第四步：查看追踪订单页面

进入"追踪订单"页面，观察 URL 中的 `id` 参数。

![追踪订单页面](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402212643.png)

注意到 URL 中的 `id` 参数值与页面上显示的订单号是**一样的**，这里可能存在相同的前端代码片段。

![id 参数与页面显示值一致](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402212735.png)

### 💉 第五步：注入有效负载

将 URL 中 `id` 参数的值替换为 XSS 有效负载：

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

![将 id 参数替换为 XSS 有效负载](../../../../../../public/p/juice-shop-reflected-xss反射型跨站脚本攻击/assets/Pastedimage20260402213653.png)

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

按下回车后可能没有立即反应，**此时只需 F5 刷新一下即可触发**，警告框弹出后确认关闭，挑战完成。


