Level 01 — 反射型 XSS
◈ 基础篇
反射型 XSS Reflected Cross-Site Scripting
什么是反射型 XSS?
反射型 XSS 是最常见的 XSS 类型。攻击者的 payload 包含在 URL 参数中,服务器将其直接反射回 HTML 响应,浏览器将 payload 当作 JavaScript 执行。
关键特征
非持久化。payload 不会存储在服务器上,需要受害者点击恶意链接才能触发。攻击者通常通过钓鱼邮件、社交媒体等方式传播恶意链接。
攻击流程
01
构造恶意 URL
page.php?search=<script>alert(1)</script>
→
02
诱导用户点击
通过钓鱼邮件、短链接等方式
→
03
服务器反射
参数值直接嵌入 HTML 响应
→
04
浏览器执行
解析 HTML 时执行注入的 JS
漏洞代码分析
以下是典型的反射型 XSS 漏洞代码。注意 $_GET['search'] 的值被直接拼接到 HTML 输出中:
<?php
// 获取 URL 参数
$search = $_GET['search'];
// 危险:直接输出,无过滤/转义
echo "搜索结果: " . $search;
// ↑ 用户输入直接拼接到 HTML
?>
当用户访问 ?search=hello 时,页面显示「搜索结果: hello」。但当用户访问 ?search=<script>alert(1)</script> 时,浏览器会将 <script> 标签解析为可执行的 JavaScript。
Source/Sink 模型
理解 XSS 的关键在于 Source/Sink 模型:
Source(源)
用户可控的输入点:
- URL 参数(
$_GET) - 表单数据(
$_POST) - HTTP 头(
$_SERVER) - Cookie(
$_COOKIE)
Sink(汇)
将数据渲染到页面的地方:
echo/printinnerHTML(JS)document.write()(JS)- HTML 属性(如
href)
当 Source 未经过滤直接到达 Sink,就产生了 XSS。
危害
窃取 Cookie
攻击者可获取用户的会话凭证,劫持账户
钓鱼攻击
在页面中注入伪造的登录表单,骗取用户密码
键盘记录
捕获用户在页面上的所有键盘输入
恶意重定向
将用户跳转到钓鱼网站或恶意下载页面
知识检测
完成以下题目,确认你已理解本关知识点
Q1 反射型 XSS 的 payload 通常通过什么方式传入?
Q2 以下哪个是最基本的 XSS payload?