挖洞经验丨看我如何发现谷歌某生产系统中的LFI漏洞($13,337)
本文分享的writeup是关于谷歌某生产系统的一个LFI漏洞,作者通过Redirect重定向组合构造方式发现了该漏洞,最终可以远程在目标服务器上实现本地系统命令运行,获取到系统敏感运行信息,最终获得了谷歌官方奖励的$13,337。
第一次尝试
尝试说明:springboard.google.com系统上的身份验证绕过(Auth Bypass)
目标对象/URL:springboard.google.com/REDACTED_DIR
总结:访问https://springboard.google.com/相关目录后,会发生页面重定向跳转,跳转后的页面中会显示一个“OnContent Debug for”调试窗口。
复现:
1.访问https://springboard.google.com/,跳转到https://cloudsearch.google.com/cloudsearch/error?et=6,页面出现以下信息,提示只有内部工作人员才有权限执行应用服务:
2.再次访问springboard.google.com下的某个目录- https://springboard.google.com/REDACTED_DIR,就会跳出“OnContent Debug for”调试窗口:
这算是内部信息泄露吗?几经测试没有新的发现,我就向谷歌上报了这个漏洞,但是,3天之后,谷歌给我的回复为:
初步看来,你的上报情况不算太严重以致可以分类为某种漏洞,但我们会尽快进行一些分析调查。 At first glance, this might not be severe enough to qualify for a reward, though the panel will take a look shortly.
更扯的是:一周之后,谷歌的回复如下:
根据我们的漏洞奖励项目来看,你上报的漏洞暂未达到奖励标准。 “As a part of our Vulnerability Reward Program, we decided that it does not meet the bar for a financial reward”
第二次尝试
由于以上的发现无法达到谷歌的漏洞奖励标准,为此,我决定围绕“身份验证绕过(Auth Bypass)”再深入对这个漏洞进行一些分析,其中肯定还存在一些隐藏的目录链接。在Web应用暴破工具wfuzz的帮助下,我发现了很多有意思的东西,实现了从身份验证绕过到管理员权限的LFI。
尝试说明:springboard.google.com系统的LFI执行;
目标对象/ URL:
springboard.google.com/REDACTED_DIR/ANOTHER_DIR
总结:实现了从身份验证绕过到名为“gxx-xxxx”管理员权限的LFI执行,springboard.google.com为谷歌的一个生产系统。
复现:
https://springboard.google.com/REDACTED_DIR/ANOTHER_DIR下,存在某个服务 “Redacted status main” (FrameworkInfo)的运行状态信息,如下:
2.如果点击页面状态信息中的最后一个按键选项“Show REDACTED” ,你就会重定向到https://springboard.google.com/REDACTED_DIR/ANOTHER_DIR?file=/proc/self/environ,其中的/proc/self/environ命令就会被加载,/proc/self/environ命令为显示出当前系统中的相关运行环境变量和配置属性,如下:
3.哇哦,这完全就是一个LFI漏洞啊!再来试试/proc/version看看:
此时,我屏住了呼吸,内心却兴奋不已,这是谷歌生产系统中具备管理员权限的LFI漏洞啊!另外,每次刷新/proc/self/environ命令后,得到的都会是不同的系统变量,从这可以看出,该域名下对应了多个服务器系统。
之后,我还努力想从LFI实现RCE,但无奈谷歌的安全防护还不错,我未能成功,另外,也无法从中读取一些类似/proc/*/fd、ssh keys、server keys等日志密钥信息。
漏洞上传的进程
2019.3.22 向谷歌上报第一个身份验证绕过漏洞 2019.3.30 发现LFI漏洞并向谷歌上报 2019.4.04 谷歌回复称第一个漏洞未达奖励标准 2019.4.17 我询问谷歌是否两个漏洞都未达到奖励标准 2019.4.23 谷歌回复称他们搞乱了 正在核定第二个LFI漏洞 2019.5.21 谷歌奖励了我$13,337美金
*参考来源:omespino,clouds编译,转载请注明来自FreeBuf.COM
- ASP.NET Web API自身对CORS的支持: EnableCorsAttribute特性背后的故事
- 【黑客解析】黑客是如何实现数据库勒索的 ?
- 直播回看:高可用架构入门 —— 腾讯云架构演变及经验
- 【腾讯云的1001种玩法】十分钟轻松搞定云架构之一 :从上云开始
- 【腾讯云的1001种玩法】十分钟轻松搞定云架构之二:更好的网络
- 【腾讯云的1001种玩法】十分钟轻松搞定云架构之三:更大的存储
- Socket学习总结系列(一) -- IM & Socket
- 【腾讯云的1001种玩法】十分钟轻松搞定云架构 之四:替你分心的负载均衡
- 【腾讯云的1001种玩法】十分钟搞定云架构 · 什么是Bucket、什么是Object
- 【腾讯云的1001种玩法】十分钟轻松搞定云架构 · 负载均衡的最佳实践
- 【黑客浅析】像黑客一样思考
- 【腾讯云的1001种玩法】 十分钟轻松搞定云架构 · 负载均衡的几种均衡模式
- ASP.NET Web API的Controller是如何被创建的?
- 【腾讯云的1001种玩法】十分钟轻松搞定云架构:COS的两种上传模式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- numpy 计算路线距离
- 自然语言处理中的预训练模型(下)
- MySQL性能优化的最佳20+条经验
- 《剑指 offer》刷题记录之:回溯法
- 《剑指 offer》刷题记录之:动态规划与贪婪算法
- MySQL使用distinct去掉查询结果重复的记录
- R语言基于协方差的结构方程拟合的卡方检验
- 复制表
- R语言中小样本违反异方差性的线性回归
- 《剑指 offer》刷题记录之:位运算
- tf.train.batch 的偶尔乱序问题
- R语言中的生存分析Survival analysis晚期肺癌患者4例
- R语言异方差回归模型建模:用误差方差解释异方差
- R语言使用二元回归将序数数据建模为多元GLM
- PHP中的SESSION机制应用