我们在漏洞挖掘的时候,一个很重要的方式是对网站的JavaScript代码做审计,比如
-
找到了一堆path,但是不知道参数,也fuzz不出来,一个可能的未授权接口就只能放弃
-
数据被加密了,但是不知道算法,需要到JS中去找对应算法实现
-
分析业务流程,找对应的逻辑漏洞
-
等等
我一般的操作方式是直接把JS代码下载到本地,然后进行反混淆,再使用VS Code去搜索,或者去分析流程,这个操作就比较麻烦,而且要求也更高。
我有一个挖友(有空时一起挖漏洞)不是开发出身,对JS更是一无所知,每次通过各种插件从源码中解析出来了一堆的path后,由于接口没有传参数,大部分都跑不通,全是异常。然后就会跑过来让我帮他去JS里面找参数。为了不再成为别人的“人肉参数搜索器”,于是仔细了分析了一下BP的一些功能,发现有一个小技巧可以让我们不需要下载源码,也不用反混淆的情况下,快速的找到我们想要的东西。
甚至也不需要懂什么JS,只要能够在文本里面获取关键信息就可以了。
操作步骤
0x00 流量捕获
首先我们要打开BP的proxy的被动流量捕获(Live passive crawl from Proxy),这样它会将所有的请求都根据domain、path等进行归类保存在Site map
中,方便我们后续分析。
0x01 收集JS
为了更好的收集网站的JS文件,要尽可能多的去点击网站上的各个功能点,让它加载尽可能多的JS文件。
为了避免缓存的影响,建议打开F12,禁用掉缓存。这样就保证每个JS文件都会从服务端下载,而不是使用浏览器缓存(如果使用浏览器缓存则不会被BP捕获)。
0x02 搜索JS
前置工作已经完成,下面我用一个栗子掩饰一下如何通过搜索JS文件找到对应path的参数。
下面这个路径是我通过JS源码找到的某站的一个接口路径,如果直接访问的话是会报错的:
如果我们直接去fuzz参数,那基本上是属于大海捞针,几乎不太可能成功。那这时候就需要去JS源码里面找一下它的调用代码,看看它是怎么请求的,都有什么参数。
打开Site map,选择上方的Filter:
在Filter by search item中输入我们要搜索的path:
然后左边的目录会按文本进行过滤,只剩下符合条件的请求,我们展开在左边被过滤的站点,找到对应的JS文件:
在下面的搜索框搜索对应的path,找到它的调用位置:
这时候即使不懂JS,也应该可以看出来它的参数是什么了吧,getJSON
代表它大概率是个GET
请求,然后后面第一个参数是请求路径,第二个肯定就是请求参数了,三个参数分别为:lineIdStr、sid、rand
,rand看起来是时间戳,其它两个直接随便填上参数,可以看到接口已经可以正常访问,不再报参数异常了:
这种方式来搜索请求参数信息对于大部分网站是可行的,除了一些混淆做得非常反人类的站点。这样我们再跑从JS中解析出来的未知路径的话,就可以针对性的对一些可疑接口进行进一步的测试,找到参数了,我们就可以通过fuzz参数值等方式,来验证未授权接口。
可能还有一些参数的结构和PATH不在一起,可能在上层的方法调用处,那么我们可以根据方法再搜索一次就行了。比如上面的例子,这个PATH的外层方法是lineLocalPromotion,那么我们根据这个名称再从第一步开始,搜索一次就行了。
最后
最后我想说,即使不懂代码,但是对于一些基础知识也是必须要了解的,比如HTTP协议这些,如果没有基础知识的铺垫,真的很难继续向上攀爬。
然后对于JS这块,可以在挖洞的同时,同步的去学习一点JS知识,然后在挖洞的过程中去实践,这样会提升得非常快。最后祝大家天天高危险,日日严重!
欢迎关注我的公众号“混入安全圈的程序猿”,更多原创文章第一时间推送