📖 教程:什么是 Blind XSS?
原理
Blind XSS(盲注型 XSS)是存储型 XSS 的特殊变体。攻击者提交的 payload 不会立即在自己的浏览器上执行, 而是在另一个场景下(如管理员后台、日志系统等)被触发。
核心特征:攻击者看不到直接反馈。payload 被存储后,需要等待特定条件(其他用户访问、后台处理)才会触发。
常见场景
- 👤 用户注册:管理员审核用户资料时触发
- 📧 联系/反馈表单:客服查看消息时触发
- 📊 用户行为分析:分析人员查看统计时触发
- 📋 日志注入:管理员查看 User-Agent/Referer 日志时触发
- 📎 文件名注入:管理员浏览文件列表时触发
带外检测(OOB)
由于 Blind XSS 无法直接看到结果,需要使用带外检测确认 payload 是否触发:
webhook.site— 在线回调服务Burp Collaborator— Burp Suite 内置 OOB 平台- 自建 DNS/HTTP 服务器
漏洞代码分析
<?php
// 前端:用户注册(攻击者可控)
// username 可能包含: <script>alert(1)</script>
$_SESSION['users'][] = [
'username' => $_POST['username'],
'bio' => $_POST['bio']
];
// 后端:管理员查看用户资料
// 危险:直接输出,未转义
echo $user['username']; // 触发 XSS
echo $user['bio']; // 触发 XSS
?>
真实世界影响
Blind XSS 非常危险,因为:
- 攻击目标通常是高权限用户(管理员、运维)
- 可以窃取管理员 Cookie,进而控制整个系统
- 难以被发现,因为普通用户不会看到 payload
🎯 练习:触发 Blind XSS
◈ 渗透任务
管理后台盲打攻击验证
任务中
你的身份
「暗影安全公司」渗透测试工程师
目标网站
UserHub 用户管理系统 (users.userhub.example.com)
委托方
UserHub 安全团队 — 你无法直接访问管理后台,但需要验证是否存在 XSS
任务目标
在注册表单注入 Blind XSS payload,使其在管理员审核时触发
- 构造包含回调的 Blind XSS payload
- payload 在管理员查看用户资料时触发执行
目标:UserHub 用户管理系统 (users.userhub.example.com) 的注册页面。你提交的资料会被存储起来,稍后由管理员审核。
由于你无法直接看到管理员看到的内容,你需要设计一个能在后台触发的 payload。
提示:点击下方的"模拟管理员后台"按钮可以模拟管理员看到的效果。
提示:点击下方的"模拟管理员后台"按钮可以模拟管理员看到的效果。
👥 已注册用户列表(前台视角 — 显示"已脱敏")
暂无注册用户...
暂无注册用户...
点击此按钮模拟管理员查看用户资料(触发存储的 payload)
📄 查看漏洞源码 (PHP)
<?php
session_start();
// 用户注册 — 数据存储(模拟写入数据库)
if ($_POST['username']) {
$_SESSION['users'][] = [
'username' => $_POST['username'],
'email' => $_POST['email'],
'bio' => $_POST['bio']
];
}
// 管理员后台查看用户资料 — 未转义输出
echo "<div class=\"user-profile\">";
echo "<h3>" . $user['username'] . "</h3>"; // XSS 点 1
echo "<p>" . $user['email'] . "</p>"; // XSS 点 2
echo "<p>" . $user['bio'] . "</p>"; // XSS 点 3
echo "</div>";
?>
🔒 过滤状态:前台页面对用户输入做了
htmlspecialchars() 转义(安全),
但管理员后台直接输出原始数据(漏洞所在)。你看到的"管理员后台"就是真实场景。