挖洞经验 | 谷歌票据上传系统中的Blind XSS漏洞
作者:admin | 时间:2019-7-7 14:21:51 | 分类:黑客技术 隐藏侧边栏展开侧边栏
*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。
今天的Writeup讲述了作者在谷歌供应商发票上传系统中,发现了其上传功能存在上传文件类型可更改缺陷,最终利用该缺陷在谷歌内部系统googleplex.com中实现了Bind XSS执行。以下是作者的分享。
谷歌票据提交系统
谷歌这种大厂商背后少不了各种电气和信息化供应商的产品支撑,为了了解工程进度和资金支付情况,谷歌提供了一个在线系统方便供应商向其上传一些电子化票据,该系统被称为Google Invoice Submission Portal(谷歌票据提交系统),地址为gist-uploadmyinvoice.appspot.com,如下:
一眼就能看出,这是一个架构在谷歌免费应用空间(GAE)appspot.com的网站,谷歌自己也经常在GAE上架设应用网站,一段时间的优化完善之后,会把其生产版本转移到google.com或其它域名。我就搞不懂这个票据提交系统为什么会出现在appspot.com上呢?估计是忘记转移到google.com上了吧。
上传功能测试
在谷歌票据提交系统(Invoice Submission Portal)中,首先要求我们提供输入的是一个采购订单编号(Purchase Order Number)。这里我们随便输入一组数字,点击右边的放大镜搜索按钮。然后,它会跳出以下组织机构选项,这些选项初看起来像是按不同国家区分,这里,我们随便选择一个然后提交。
之后,就会显示需要输入各种信息的页面,这些信息包括邮箱、票据号码、票据日期、税率等,另外还包含了一个名为“Upload Invoice*”的PDF票据上传按钮,选择它之后,会被要求上传小于15MB的PDF格式票据电子文件。
测试XSS漏洞
在上述各种输入区域内,我写入了各种XSS Payload,希望谷歌对这些区域的过滤净化机制存在不足,能有效实现XSS反弹,但最终,我一无所获。
做完输入区域的XSS测试之后,只剩下票据上传功能了,我们来深入分析看看。从其源码可以发现,它只接收后缀名为.pdf格式的文档。
我想这只是一个前端的验证机制,我们可以在POST请求中来尝试修改上传文档的后缀名,于是,通过拦截抓包,我们获取了正常的PDF票据上传POST请求,如下:
如果在这个请求中,我们尝试把上传票据文件后缀名进行一个更改如何,把它从.pdf更改为.html。所以先把其文件名称和后缀更改为test.html,然后把对应的Content-Type 也更改为了 text/html,当然文件内容为ezXSS生成的一个XSS Payload,其中的<script>标签结合src属性的指向为我控制的一个网站,每当Payload加载时,就会向我的邮箱发送一个提示消息邮件。如下:
Blind XSS有效执行
几天之后,我邮箱里就收到了一封XSS Payload在谷歌内部系统googleplex.com有效执行的提示消息。
由于googleplex.com是谷歌的内部系统,只有内部员工才能登录应用,外部员工直接访问会被跳转到一个内部员工登录页面(Google Corp login page),也就是我们说的 MOMA login page,但也只有谷歌的身份凭据信息才能登录进入。
这种替换PDF文件的方式,在googleplex.com中被识别成了PDF,但其实,它是一个HTML文件,最终会被解析成HTML执行,当然其中的XSS Payload也随之而生效了。
漏洞影响
如果攻击者构造的XSS Payload是一段精心编写的JS代码,那么谷歌员工点击之后,在googleplex.com中执行,将会造成票据信息和其它内部敏感信息泄露。由于谷歌员工是用自己的公司账号进行googleplex登录的,所以,进一步的漏洞构造,还可能造成身份劫持等风险,严重威胁其它谷歌内部系统。
但经漏洞上报后,谷歌给了我及时回复,其中声明:对googleplex.com的入侵并不会造成其它googleplex.com应用的访问控制,googleplex中的各个应用系统都是相对独立的,各个系统的凭据信息并不能执行通用登录。
谷歌的回复说明,虽然不能针对该漏洞继续深入利用,但至少可以对票据处理相关的内部系统造成破坏影响或入侵威胁,其它googleplex.com系统,由于CORS的应用,不能形成实质影响。
漏洞修复
在上报给谷歌安全团队的漏洞报告中,我详细给出了相关细节和相关利用信息,四天之后,我收到了谷歌官方的漏洞确认和赏金奖励信息。
漏洞上报进程
2019.2.21 漏洞初报
2019.2.22 谷歌把漏洞定级为P2
2019.2.25 谷歌再次把漏洞级别提升为P1
2019.3.6 漏洞赏金发放
2019.3.26 漏洞修复
*参考来源:appio,clouds编译,转自FreeBuf