JS里能找到啥?
作为一个安全从业人员,我们最关心的就是Js文件中的这些东西:
如果你是使用Burp Suite来进行测试,就可以通过多种方式来收集应用程序中的所有JavaScript文件。这也是俺比较喜欢的一种方式
挂着burp,然后浏览应用程序。浏览结束后,burp会被动或主动记录下所有经过burp的请求,其中就包括你请求的js文件,然后咱们就可以使用burp提取出js文件?
如果你使用的是Burp Suite社区版,则可以导航到 Proxy > HTTP history,并使用显示过滤器仅显示该应用程序使用的JavaScript文件。您还可以复制所有显示的JavaScript文件的URL。
如果使用的是Burp Suite专业版,不仅可以复制应用程序中所有JavaScript文件的url,还可以导出所有js文件内容。在Target > sitemap下,右键点击感兴趣的站点,选择Engagement tools>Find scripts。使用此特性,你可以导出该应用程序中的所有脚本内容。
还有一种利用【互联网归档数据库】快速查找Js文件的方法,如Wayback Machine,这种技术是完全被动的,因为我们不向目标应用服务器发送任何请求。
Wayback Machine可以理解为一个互联网的历史记录数据库,你可以在里面找到某个网站所有的链接
它的地址是(可能需要爬墙):https://archive.org/web/
在诸如Wayback Machine之类的Internet档案库中进行挖掘对于识别应用程序中的JavaScript文件非常有用。有时,能够找到服务器上未删除的较旧的JavaScript文件
waybackurls是一个使用Wayback Machine搜索某个站点JavaScript文件(或者任何其他url)的工具,大家可以瞅瞅
使用Wayback Machine可能会导致误报,所以,在收集了JavaScript文件的url列表之后,我们需要检查这个js文件是否真的还存在,可以使用curl快速检查服务器上的JavaScript文件的状态
命令如下(感觉老外特别喜欢玩这些花里胡哨的命令):
cat js_files_url_list.txt | parallel -j50 -q curl -w 'Status:%{http_code}\t Size:%{size_download}\t %{url_effective}\n' -o /dev/null -sk
如果你觉得上面的方法太麻烦了,也可以使用其它现成的工具,例如:hakcheckurl
go get github.com/hakluke/hakcheckurl
cat lyftgalactic-js-urls.txt | hakcheckurl
大多数时候,我们收集的JavaScript文件都是经过压缩、混淆的。
有很多工具可以压缩JavaScript。UglifyJS是一个压缩JS代码的工具,它也可以作为npm包使用
有很多工具可以解压缩js。例如JS Beautifier,这个工具很强大,我们可以在各个语言中使用它,例如node.js、python等
当我们在反混淆时,特别是在逆向恶意程序时,没有一种技术或工具是一劳永逸的。我们将不得不尝试各种工具、去混淆方案。当然,目前已经有很多工具可以帮助咱们去混淆Js代码,例如:
https://github.com/mindedsecurity/JStillery
js文件中有很多接口,这些接口可以扩展我们的攻击面,例如,我在水滴src中某个页面下发现的js文件:
虽然经过测试这些接口貌似都没有未授权访问问题,但是,只要肯挖,说不定下一次就是一个高危敏感信息泄露呢?
当然,也有一些很方便的工具帮助我们从js文件中提取这些接口:
relative-url-extractor:这个工具既可以直接从线上js文件中提取接口,也可以从本地文件中提取,并且,它还可以从压缩的js代码中提取,直接省去了咱们前面说的美化js的步骤
LinkFinder:这个工具也相当nice,应该很多人都知道,使用也很简单:
python linkfinder.py -i https://example.com -d -o cli
当然,还有国内一位安全研究员写的JSFinder,也是很好用的
找这些敏感信息也还是靠正则,当然还有一种技术叫entropy,俺也不知道这个怎么翻译才好,应该就是根据一串字符串的随机性来判断这个字符串是否是密钥,我们都知道,密钥都是一串字符嘛,同样的,有工具?,安心做个脚本小子吧:
除此之外,还可以用grep/sed/awk等工具来搜索敏感词
我都说了,shell玩得好,老婆随便找
下面的内容逐渐超出我漏洞挖掘的耐心范围,非战斗人员请撤离❗️❗️❗️
JS中的一些函数使用可能带来潜在的问题,例如innerHTML的使用就可能带来dom xss问题
而现在前端框架琳琅满目,我一个都不会,md
他们用的方法名字那叫一个长呀,React中就有一个和innerHTML差不多的函数叫做dangerouslytSetInnerHTML,这个函数也是咱们的重点关注对象
然后还有Angular中的bypassSecurityTrustX,还有咱们熟悉的eval函数
除此之外,还有postMessage函数值得关注,这个函数相关的问题都可以专门开一篇文章讲了,这里就不多说了,下次一定,下次也不一定...
localStorage和sessionStorage是HTML Web存储对象
通过web storage,web应用程序可以在用户的浏览器中本地存储数据
识别使用Web Storage存储的内容非常重要,尤其是可能导致潜在安全问题的内容
在JavaScript中,我们可以可以查找window.localStorage
以及window.sessionStorage
。这里俺也不太了解,留待大家去探索吧?
寻找js中的危险函数、危险代码高度依赖目标所使用的的前端技术栈,不说了,先去学webpack了
哦,对了,我们还可以使用工具呀?
老生常谈的问题,寻找一些老旧的存在问题的前端框架,不过,我觉得这个基本没啥用,为了文章完整性还是列出来吧
如果目标程序使用了一些存在漏洞的前端框架,那对我们来说也是一点曙光不是?
关于这个的挖掘,直接上工具吧——Retire.js
Retire.js是一个可以识别应用程序使用的老旧JavaScript框架的工具
该工具可以用作独立工具,浏览器扩展,grunt插件或Burp / ZAP扩展。当然,这个工具也还是有很多误报的,不过作为参考还是不错的嘛