欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

看我如何挖到GoogleMaps XSS漏洞并获得5000刀赏金

来源:安全客 作者:佚名 时间:2017-03-11 TAG: 我要投稿

 前言

几个月前,我使用Google地图,或者Google街景时,发现地址栏和以前有些不同了。从2014年的某个时间起,URL地址里的参数不再是普通的查询字符串了,相反,它变成了用感叹号分隔的奇怪的字母数字组合。

同时我查看了浏览器的WEB控制台,发现不仅发往AJAX API的请求被加密了,服务器的响应二进制数据也被一种新颖的方式签名了(除了一些图片)。除了这么多的谜题,还有什么更能激发我的激情呢?Nothing!

揭开谜底

谷歌地图有一大块约3.2 MB的压缩JavaScript脚本。谷歌地球很重 - 以前的谷歌地图是一个笨拙的平面地图,现在的谷歌地图有一个地球模式。它使用WebGL生成3D图形,具有大量的组成部件,请求和显示缓存,以及JavaScript实现的调度和规划模块这些类似东西。

面对这么大的代码量,你需要做一些组织工作。幸运的是近几年几乎所有的主流浏览器都加上了自己的调试器。你可以在任何时候添加断点,甚至在发送一个Ajax请求或者触发DOM事件时。基本上逆向工程有静态和动态两种方式,我一般一喜欢静态分析,极端的情况下会使用动态分析。

谷歌使用了8个javascript文件,这些文件只有在分隔不同的模块时才使用换行符。Javascript模块会会在URL中以两三个字符的形式引用。这些文件使用Closure Compiler压缩,谷歌的压缩器将会使用内联函数,将你的函数声明放到条件表达式中,使用简单的逗号分隔甚至更多的魔术方法来增加阅读难度。回到代码可读性很差的WEB控制台,或者使用另外一个简单工具(在 http://jsbeautifier.org/ )。

查看这种类型的代码可能会吓到一些人,但是这个其实也不是特别难。就像读汇编代码一样,只要直接找到有用的点就行了。通过字符串或者常量搜索,从一个相关函数跳到另一个,在一个txt文件里记下有用信息,再加上对函数功能的猜测就可以了。

例如,下面我们搜索一个感叹号,好了。。。

通过观察,我们发现URL的参数由一些重复的片段组成:

1、 感叹号:分隔符

2、 数字:在键值对中看起来像是整数KEY。

3、 单个字母:这个字母决定了后面跟随什么类型,“s”表示字符串,“I”表示整数

4、 数字、字母或字符串:键值对中的值。

这是一个新颖的序列化方式吗?事实上,我思考了一下,这个并不新奇,它就是protobuf而已。

Protobuf是一个在谷歌产品中广泛使用的格式(用于存储,通讯等)。它的第一版开发于2001年,第二版为了取代XML发布于2008年,2016年的第三版做了一些改进。目前它在谷歌的前端产品中用的越来越多,甚至在Android相关的产品中也到处是它的身影。

Protobuf使用二进制形式传输数据。当你要创建一个使用Protobuf的项目时,首先要定义一个键值对组结构(.proto格式类似C语言),每一个键值对数据域都包含类型,名称及数字。当把这些键值对数据域组合到一起并命名后就称为message。键值对数据域也可以是message的形式(称为嵌套message),还有其他的一些格式暂时就不细说了。

现在将.proto格式编译成代码,任何语言都可以对你定义的message进行读写操作。

接下来程序会将Protobuf域数据转换成它自己的格式(通过调用之前的代码),当这些都完成后即会调用库函数将数据序列化成二进制格式。

结果会被这么编码:protobuf编码其实类似tlv(tag length value)编码,其内部就是(tag, length, value)的组合,其中tag由(field_number<<3)|wire_type计算得出,field_number由我们在proto文件中定义,wire_type由protobuf根据proto中定义的字段类型决定,length长度采用一种叫做Varint 的数字表示方法,它是一种紧凑的表示数字的方法,用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数,具体细节可以谷歌Varint。

那么URL中的参数是同样的东西吗?只是换成了text编码?

结果表明二进制格式中只有5中数据类型(o:可变长度的整型,1:固定64bit,2:字符串、字节或者message,5:固定的32bit,3和4:一些过时的方式来定义message,多到你完全不想了解),谷歌地图的URL中一共有18中不同的字符来代表类型。

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载