Bug Bounty:利用Acunetix发现Google XSS
字数 937 2025-08-25 22:58:34

利用Acunetix发现Google XSS漏洞分析报告

漏洞概述

本报告详细记录了使用Acunetix漏洞扫描器发现Google某服务中的跨站脚本(XSS)漏洞的过程,包括漏洞发现、分析、利用和修复的全过程。该漏洞最终获得Google漏洞赏金计划5000美元的奖励。

漏洞发现

扫描过程

  • 使用Acunetix扫描器对Google各项服务进行常规扫描
  • 扫描器报告了以下可疑URL:
    https://google.ws/ajax/pi/fbfr?wvstest=javascript:domxssExecutionSink(1,%22%27%5C%22%3E%3Cxsstag%3E()locxss%22)
    

初步验证

  • 虽然扫描器有时会出现误报,但考虑到目标为Google服务,决定深入分析

漏洞分析

HTTP响应分析

服务器返回的响应包含以下关键内容:

<!doctype html><div style="display:none"> 
  <form method="post"> </form> 
  <script nonce="+ao+4Egc+7YExl3qyyWMJg==">
    (function(){
      var a=window.document.forms[0],
          b=location.hash.substr(1);
      b||window.close();
      var c=b.split("&"),
          d=decodeURIComponent(c[0]);
      a.action=d;
      for(var e=1;e<c.length;e++){
        var f=c[e].split("="),
            g=document.createElement("input");
        g.type="hidden";
        g.name=f[0];
        g.value=decodeURIComponent(f[1]);
        a.appendChild(g)
      }
      a.submit();
    }).call(this);
  </script> 
</div>

代码解析

  1. 变量初始化:

    • a 获取页面中的第一个表单
    • b 获取URL中#后的内容(即location.hash去掉#)
  2. 逻辑流程:

    • 如果没有hash内容(b为空),则关闭窗口
    • 将hash内容按&分割成数组c
    • 解码数组第一个元素c[0]存入d
    • 将表单的action属性设置为d
    • 遍历剩余参数,创建隐藏input并添加到表单
    • 自动提交表单

漏洞原理

  • 关键问题在于直接将URL hash部分解码后设置为表单的action属性
  • 攻击者可构造恶意hash值执行任意JavaScript代码

漏洞利用

有效Payload

https://google.ws/ajax/pi/fbfr#javascript:alert(document.cookie)

影响范围

  • 该漏洞也影响其他Google域名,如:
    https://google.com/ajax/pi/fbfr#javascript:alert(document.cookie)
    

修复方案

修复代码

在设置action属性前添加验证:

0 != d.indexOf("http") && window.close();

修复原理

  • 检查解码后的hash值是否以"http"开头
  • 如果不是,则关闭窗口,阻止恶意代码执行

时间线

  • 报告时间: 2019年12月27日 01:01
  • 分类时间: 2019年12月27日 20:32
  • 修复时间: 2020年1月8日
  • 赏金支付: 2020年1月8日
  • 赏金金额: 5000美元

经验总结

  1. 自动化工具的价值:

    • Acunetix等扫描器能有效发现潜在漏洞
    • 即使是大公司的服务也可能存在漏洞
  2. 代码审计要点:

    • 特别注意动态设置DOM属性的操作
    • 对用户输入必须进行严格验证
  3. 漏洞利用技巧:

    • 理解location.hash的用法和潜在风险
    • 分析JavaScript代码的执行流程是关键
  4. 修复建议:

    • 对动态设置的属性值进行白名单验证
    • 避免直接使用用户输入作为可执行代码

参考链接

原文链接

利用Acunetix发现Google XSS漏洞分析报告 漏洞概述 本报告详细记录了使用Acunetix漏洞扫描器发现Google某服务中的跨站脚本(XSS)漏洞的过程,包括漏洞发现、分析、利用和修复的全过程。该漏洞最终获得Google漏洞赏金计划5000美元的奖励。 漏洞发现 扫描过程 使用Acunetix扫描器对Google各项服务进行常规扫描 扫描器报告了以下可疑URL: 初步验证 虽然扫描器有时会出现误报,但考虑到目标为Google服务,决定深入分析 漏洞分析 HTTP响应分析 服务器返回的响应包含以下关键内容: 代码解析 变量初始化 : a 获取页面中的第一个表单 b 获取URL中#后的内容(即location.hash去掉#) 逻辑流程 : 如果没有hash内容( b 为空),则关闭窗口 将hash内容按 & 分割成数组 c 解码数组第一个元素 c[0] 存入 d 将表单的action属性设置为 d 遍历剩余参数,创建隐藏input并添加到表单 自动提交表单 漏洞原理 关键问题在于直接将URL hash部分解码后设置为表单的action属性 攻击者可构造恶意hash值执行任意JavaScript代码 漏洞利用 有效Payload 影响范围 该漏洞也影响其他Google域名,如: 修复方案 修复代码 在设置action属性前添加验证: 修复原理 检查解码后的hash值是否以"http"开头 如果不是,则关闭窗口,阻止恶意代码执行 时间线 报告时间 : 2019年12月27日 01:01 分类时间 : 2019年12月27日 20:32 修复时间 : 2020年1月8日 赏金支付 : 2020年1月8日 赏金金额 : 5000美元 经验总结 自动化工具的价值 : Acunetix等扫描器能有效发现潜在漏洞 即使是大公司的服务也可能存在漏洞 代码审计要点 : 特别注意动态设置DOM属性的操作 对用户输入必须进行严格验证 漏洞利用技巧 : 理解location.hash的用法和潜在风险 分析JavaScript代码的执行流程是关键 修复建议 : 对动态设置的属性值进行白名单验证 避免直接使用用户输入作为可执行代码 参考链接 原文链接