距离上次写技术分享的文章还是在9个月前,中间这段时间主要实在各大src提交漏洞,冲冲分混混各大src年终礼品啥的,今天在分析自己漏洞提交表的时候发现自己提交的一大波漏洞类型占比还是属于去年8、9月份发现的地图API后台配置错误,使用这个漏洞至今我共赚取了漏洞赏金7853元,今天一篇文章教会各位师傅们这个漏洞怎么挖,利用什么payload,如何利用空间搜索引擎进行批量挖掘。如果你有兴趣就来瞅瞅吧
*该文章仅用于安全技术分享,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责。文章作者不为此承担任何责任。*
0x00起源
大家好,我是day1安全团队的returnwrong,当我在写这篇文章的时候并不知道如何起一个吸引人的标题,于是我去问了chatgpt他给了我很好的一个起名列表,我从中选了一个改了两个字,这就变成了现在这篇文章的标题,感叹AI科技日新月异,说不定以后挖洞就可以让chatgpt挖了/(ㄒoㄒ)/~~
每个故事都应该有个起源,大概是去年下半年某个时候,我正在在挖某个src,测了大概十几二十个子域名,一直在登录口对抗,也没有什么好的收获。于是锤头丧气的去看网页源代码。再看网页源码的时候一个key引起了我的注意,大概是怎么样的呢,见下图:
以前挖别的站的时候倒是经常看到一些key泄露,但是这次鬼使神差的想搞明白这个key到底是干什么使的,通过众所周知的搜索大法,找到了高德地图api官网,通过对官网技术文档的分析发现这个key是用于第三方网站调用显示及高德地图api进行定位、获取地理标签等服务由网站管理员于地图api官网注册申请的key值。并且这个key值无论是个人开发者调用还是企业开发者调用他都存在每日调用上限和qps(并发)上限,于是我有了一个想法,如果这个key的使用者未在后台配置白名单导致该key被第三方人员乃至黑客获取出售给其它开发者谋取利益或者恶意请求接口导致接口达到每日上限,将会导致地图加载异常,显示报错信息等。并且有很多网站及app会通过用户设备获取地理位置权限,这个大家都见过吧。定位也是依赖于这个key值,当该key值被消耗完毕,该企业将无法获取使用者的地理定位。具体大家可以看看下面这张图,这是百度地图api官网jskey配置建议:
0x01实践
我们都知道写一篇src漏洞报告,需要漏洞描述、漏洞危害及漏洞复现过程这三点,此时我搞定了描述和危害但是却卡在了漏洞复现过程这一点。我们获取key之后如何验证key是真实有效的而不是已经被网站管理员加入了白名单或者做了其它限制。回过头去我又研究了一周高德地图api、百度地图api、腾讯地图api最终总结了以下这些payload,师傅们可以直接将key值或ak值(百度地图的密钥叫ak)直接代入我总结的payload进行验证:
高德webapi:https://restapi.amap.com/v3/direction/walking?origin=116.434307,39.90909&destination=116.434446,39.90816&key=这里写key
高德jsapi:https://restapi.amap.com/v3/geocode/regeo?key=这里写key&s=rsv3&location=116.434446,39.90816&callback=jsonp_258885_&platform=JS
高德小程序定位:https://restapi.amap.com/v3/geocode/regeo?key=这里写key&location=117.19674%2C39.14784&extensions=all&s=rsx&platform=WXJS&appname=c589cf63f592ac13bcab35f8cd18f495&sdkversion=1.2.0&logversion=2.0
百度webapi:https://api.map.baidu.com/place/v2/search?query=ATM机&tag=银行&region=北京&output=json&ak=这里写key
百度webapiIOS版:https://api.map.baidu.com/place/v2/search?query=ATM机&tag=银行&region=北京&output=json&ak=这里写key=iPhone7%2C2&mcode=com.didapinche.taxi&os=12.5.6
腾讯webapi: https://apis.map.qq.com/ws/place/v1/search?keyword=酒店&boundary=nearby(39.908491,116.374328,1000)&key=这里写key
问题来了,那显示怎样的页面算是存在漏洞呢,当我们把收集的key代入payload看到类似如下地理信息就是存在:
如果提示类似于app调用失败,或者错误代码10006或10008就代表这个问题已经修复了,就不用再看了:
漏洞报告大家可以参考这个模板:
漏洞标题:xx网站-xx管理后台-存在xx地图api接管漏洞
漏洞描述:xx网站-生活圈管理后台-存在高德地图api接管漏洞,攻击者可利用抓取的高德地图ak值任意调用属于xx的高德地图的api额度造成XX的高德地图api额度被恶意盗用,消耗等。当额度被消耗完毕后,会造成地图加载异常,定位服务无法使用等,影响用户体验。
漏洞复现:
1、浏览器访问https://xxx.xxxx.com/
2、F12查看页面源代码搜索key获得key值:
3、由于此处XX管理员对于XX地图控制台配置错误,导致任意用户均可调用该api用以消耗额度,此处参考高德地图官方web调用接口构造payload:https://api.map.baidu.com/place/v2/search?query=ATM%E6%9C%BA&tag=%E9%93%B6%E8%A1%8C&region=%E5%8C%97%E4%BA%AC&output=json&ak=这里写key
调用成功如下图所示:
若配置正确攻击者调用该接口会提示错误代买10006或10008无法通过该接口获取地图信息
修复方案:
参考XX地图官方文档
0x02挖掘方法1.0
先跟各位师傅们讲讲关心的漏洞赏金的问题,从我挖这个洞开始最高赏金900最低赏金3块,其它各种src给的各种价格都有,我画了一张柱状图,各位师傅可以参考看看:
1.0的挖掘方法,我主要是首先看各大src的资产范围,然后挨个去网站找调用了地图的功能点,例如:关于我们、位置查找等效率比较低,但是各大src有活动的时候混个礼盒还行,漏洞赏金大概挖了2k左右,当时基本src都看了一遍,后来我觉得有独立src的公司基本看完了就没在关注这个洞了。知道后来我对这个漏洞的研究又取得了新的突破
0x03挖掘方法2.0
1.0的方法刷了一圈之后呢,就继续挖别的洞去了,后来又遇到了瓶颈又处于登录口对抗状态的时候我又想起了这个洞,回头再去看官方api的时候,发现地图们的api不止用于显示js地图还用于定位、距离测算等等功能。那就是说可能不显示地图的界面也可能存在这个问题,所以方法进入2.0时代。
发现方法2.0(网络空间搜索引擎):
不卖关子直接上研究成果,你只要把你要挖的网站等更域名替换下面我写的语法即可,搜到后打开网站在源代码中搜索关键字ak=或key=得到key值
奇安信hunter:(web.body="webapi.amap.com"||web.body="api.map.baidu.com"||web.body="apis.map.qq.com"||web.body="map.qq.com/api/js?v=")&&domain.suffix="根域名替换"
fofa:(body="webapi.amap.com"||body="api.map.baidu.com"||body="apis.map.qq.com"||body="map.qq.com/api/js?v=")&&domain="根域名替换"
钟馗之眼:(Banner:"webapi.amap.com" Banner:"api.map.baidu.com" Banner:"map.qq.com/api")+site:"根域名替换"
360QUAKE:domain:"根域名替换" AND (response: "webapi.amap.com" OR response: "api.map.baidu.com" OR response: "map.qq.com")
如下数据包即为key调用的包,其它百度地图、腾讯地图同理:
只要空间搜索引擎搜索出来直接去看源代码,或者用burp抓包,逐个放包,找到key值直接用上面的payload去调用,调用成功提交报告即可。2.0的方法我大概挖了5k左右,就各个平台都提交过。
0x04泼个凉水及忠告
*该文章仅用于安全技术分享,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责。文章作者不为此承担任何责任*
现在这个漏洞基本上都被挖了一遍,现在在挖可能不好再通过了,白帽师傅们,就当学个思路,如果挖洞过程提交了,没有通过也不要当回事。如果通过了就当捡个洞。心态放平。
写这篇文章的目的不仅是给白帽师傅们挖洞提供一些思路,并且也给甲方及网站技术负责人提供些许安全建议,当引用第三方组件的时候需要进行安全配置及对功能进行及时更新,而不是只关注自己的业务安全,最终导致业务被攻破的可能不是自己的问题,而是第三方组件的问题。永远记住,在你看不到的地方,黑客永远盯着你。
0x05说点题外话
说真的挖洞其实是个枯燥的过程,很多时候我们面对的就是一个一个请求包,遇到一个又一个自己无法解决的问题。直到去年中旬我从未想过年底我能在各大src年榜上有排名,以前对于别人只是羡慕,后来加入day1安全团队,和许多师傅一起交流技术学到很多东西。如果说经验之谈的话,我觉得挖洞就像打游戏,你需要队友共同交流你才能进步。在这里给团队打个小广告,欢迎大家关注公众号:Day1安全团队。