谷歌也翻车,挖一个 XSS 漏洞,薅了两万多 💰
大家好,我是楷鹏。
程序员 Matan 挖到了一个 XSS 漏洞并报告给谷歌,奖励 3133.7 美金(约合人民币 22666 元)
这是谷歌 Bug Hunter 的奖励规则:
事情起因是这样的,Matan 看到了一篇揭露谷歌 SSRF 漏洞的文章,文章中提到谷歌的这么一个网站
📍 https://toolbox.googleapps.com
于是便开始探寻,先是查看 robots.txt 文件:
#apps-toolbox
User-Agent: *
Allow: /apps/main
Allow: /apps/browserinfo
Allow: /apps/checkmx
Allow: /apps/dig
Allow: /apps/har_analyzer
Allow: /apps/loganalyzer
Allow: /apps/loggershark
Allow: /apps/messageheader
Allow: /apps/recovery
Allow: /apps/useragent
Allow: /apps/other_tools
Allow: /apps/encode_decode
Allow: /apps/screen_recorder
Disallow: *
robots.txt 是一份存在于网站根目录的文件,它会告诉网络爬虫应该哪些页面可以爬,哪些不可以,以此避免网站被爬虫过度请求,造成请求负担
在 robots.txt 文件中,一个链接对应一个工具网页
但是有一个例外,/apps/recovery
是不能被直接访问的
在经过简单搜索后,发现它存在子页面
recovery/domain_in_use
recovery/form
recovery/ownership
这些子页面都能够接收多个 URL 参数,比如
recovery/domain_in_use?visit_id=xxx&user=xxx&domain=xxx&email=xxx
如果输 入这条继续跳转链接的话
https://toolbox.googleapps.com/apps/recovery/ownership?domain=example.com&email=email@example.com&case=45500368&continue=/apps/recovery/...
这条链接包含参数 domain=example.com
,注意还有一个参数是 continue=/apps/recovery/...
输入该继续跳转链接会得到提示:
在这里,发现了问题,CONTINUE 按钮的链接居然是来自于 continue
参数
Matan 验证了下,注入 JavaScript 脚本代码:.../continue=javascript:alert(document.domain)
成功执行 ✅
这个网站没有 CSP 安全策略,也没有任何防护措施,因此可以从任意外部获取资源
继续尝试加载外部恶意脚本,该恶意脚本用于获取用户 IP 地址:
.../continue=javascript:fetch(%27https://api.ipify.org?format=json%27).then(response=%3Eresponse.text()).then(data=%3E{alert(data);%20})
也是成功执行 ✅
到这里,可以确定存在 XSS 漏洞。
回顾一下 XSS 知识
XSS(Cross-Site Scripting),跨站脚本攻击,没有做好校验,相信用户的输入,接收了攻击者的恶意输入(一般是 JavaScript 脚本代码),导致该恶意输入在其他用户页面上执行。XSS 一般分为三种:
- 存储型:恶意输入被永久储存在了后台服务中,无论用户什么时候打开网站,拿到该恶意输入,浏览器就会执行
- 反射型:恶意输入内嵌在 URL 或者其他输入中,立即被后台转发,用户只要访问构造好的 URL,浏览器就会执行
- 基于 DOM:攻击者操作用户的 DOM 结构,进而执行恶意代码
上诉 Matan 的例子,就是一个很典型的反射型 XSS。
但这个 XSS 太低级了,以至于 Matan 本人都难以置信,毕竟谷歌技术是业界有名的
不过谷歌惯常喜欢用自研框架,而这些框架没有做好安全策略,产品翻车也是难免。
One more thing:
{
"公众号": "程序员楷鹏",
"简介": "世界有 10 种人,一种是懂二进制的,另外一种是不懂的",
"还有": "你肯定会关注的对吧彦祖?"
}