导语:在这篇博文中,我们介绍了一种执行客户端JavaScript代码静态分析的通用方法。我们所介绍的只是一个工作流程,能够指导你从收集JavaScript文件开始到使用JavaScript代码查找安全问题。

JavaScript已经成为现代Web浏览器开发中最普遍的技术之一。使用客户端JavaScript框架(如AngularJSReactJSVue.js)构建的应用程序已向前端输送了大量功能和逻辑。

随着客户端功能和逻辑的增加,客户端的攻击面也在逐渐增加

作为安全测试人员,我们必须了解这些应用程序的攻击面。对我们来说,了解要查找的信息,查找的位置以及如何查找那些能导致在应用程序中发现潜在安全问题的信息都很重要。

在这篇博文中,我们将介绍如何对客户端JavaScript代码进行静态分析来发现应用程序中潜在的安全问题。

我们特别感兴趣的事情是通过执行静态分析发现安全问题。我们不会深入研究性能分析或功能测试

1_Jm1f5iF-jXygKoOY9_HJaA.png

静态分析是分析代码而不是执行代码

我们需要找哪些信息?

作为渗透测试人员,对客户端JavaScript进行静态分析时,我们或多或少会对以下几类信息感兴趣

1.会增加攻击面(URL,域等)的信息

2.敏感信息(密码,API密钥,存储等)

3.代码中的潜在危险位置(evaldangerouslySetInnerHTML等)

4.具有已知漏洞的组件(过时的框架等)

执行静态分析的步骤

我们将执行静态分析分解为以下几个步骤:

1.识别和收集应用程序中的JavaScript文件
2.
将收集的JavaScript代码进行可读处理(Unminify / Deobfuscate
3
.识别可能导致发现安全问题的信息

收集JavaScript文件

1.如果你使用的是Burp Suite测试应用程序,那么有多种方法可以收集应用程序中的所有JavaScript文件。

Appsecco中,我们遵循用户驱动的工作流程来测试Web应用程序,我们通过模拟用户浏览整个应用程序来开始测试

通过设置Burp代理在浏览应用程序时将产生的流量发送到Burp。完成浏览后,你可以使用Burp的工具集来提取所有的JavaScript文件。

1_8YLktaI23nHogmLT175ywg.pngBurp显示过滤器仅显示给定的应用程序的JavaScript

1_2AzEsdFW7ymvijuZV593Bg.png

复制过滤后显示的所有JavaScript文件的URL

1_Asd2jV3vCOX55BzZLirdMA.png

Burp 中的查找脚本功能可以识别应用程序上的所有JS

1_q27kCqV73EHVah3T-uwZRA.png

Burp中的查找脚本的功能可以导出所有脚本,而不仅仅是URL

2.另一种在应用程序中快速列出JavaScript文件的有趣技术是挖掘类似Wayback Machine之类的互联网档案数据库。此技术完全是被动的,因为我们不需要向目标应用程序的服务器发送任何请求。

挖掘Wayback Machine 等互联网档案对于识别应用程序中的JavaScript文件非常有用。有时你将能够找到在服务器上还未删除的JavaScript文件

go get waybackurls waybackurls internet.org | grep“\ .js”| uniq | sort

1_2U4rw-JOF5sFEWyEsJdPxQ.png

使用“waybackurls”提取在Wayback Machine归档中列出的域名的JavaScript文件的URL

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

1_3ThluG1AInGCFLaJPfnjjQ.png

使用cURL快速检查服务器上JavaScript文件的状

对收集的JavaScript代码进行可读处理

有时,你收集的JavaScript文件可能无法读取或可读性较差。这可能是因为开发人员已经将JavaScript代码进行缩小或混淆。

缩小指在不影响浏览器处理资源的方式的情况下删除不必要或冗余数据的过程;例如代码注释和格式化,删除未使用的代码,使用较短的变量和函数名称等等

混淆:涉及对程序进行修改,更改变量,函数和成员的名称,使程序更难理解

1_CYJ2_yGXWT91kxoGTMdgRQ.png

使用UglifyJS压缩JavaScript 

1_Yk_g9ivV9SipOqVftp5DCw.png

使用JS Beautifier解析JavaScript

在执行反混淆处理尤其是在处理恶意软件时,没有一种适合所有技术的通用工具。你将不得不尝试各种工具,反混淆方案并执行一些手动分析。但是有多种工具可以帮助你反混淆JavaScript代码。我们经常使用的一些工具是JStilleryJSDetoxJS-BeautifierIlluminateJsJSNice等。

在JavaScript中识别有趣的信息

1.JavaScript文件中寻找的关键信息之一:端点,即完整的URL,相对路径等。

识别完整的URLJavaScript文件中的相对路径将帮助我们发现攻击面并可能发现更多的漏

1540367599293059.png

使用relative-url-extractor从远程JS文件中提取相对路

python linkfinder.py -i https://example.com -d -o cli

1540367559779151.png

使用LinkFinder从应用程序中的所有JS文件中提取端

2.CloudScraper是一种用于搜寻云资源的爬虫和抓取目标的工具。可以查看JavaScript文件来查找对云资源的引用。此搜索产生的副作用是该工具还会识别托管在云服务(如Amazon S3 Buckets)上的所有JavaScript文件。

1_OkTFZECkJXkDxB9wMPSX6g.png

使用CloudScraper识别源代码中的云资

3.JavaScript文件还可能包含敏感信息,如凭据和API密钥。从广义上讲,我们可以使用正则表达式或熵来识别源代码文件中的秘密。正则表达式搜索将能够识别用户设置的凭据,例如用户名和密码。基于熵的搜索在识别足够随机的密钥(例如API密钥和令牌)方面是非常有效的。

4.在查看JavaScript文件时,重要的是识别代码中的危险位置,即开发人员往往会犯错误的地方,这会导致潜在的安全问题。

1_VJLKbFxI4bjk-JQ8oyOqpQ.png

Angular中的bypassSecurityTrustX 法列表

JavaScript中查找可能导致潜在安全问题的危险位置强依赖于正在使用的技术堆栈。你应该确定正在使用的框架,在框架中识别危险的函数,然后在源代码中查找它们。

5.使用安全评估工具和静态安全扫描程序可以轻松识别JavaScript代码中的低危漏洞。JSPrime是一个静态分析工具,用于查找JavaScript代码中的安全问题,但项目暂时没有更新。ESLint是最流行的JavaScript 评估工具之一。通过添加自定义规则,可以轻松自定义ESLintESLint提供了许多自定义安全规则,特别是针对AngularReact等现代框架。

1_7_KdLVGWUWylX6CoHHignQ.png

配置了Angular安全规则的ESLint报告了潜在的安全问

6.在执行安全性评估时,识别应用程序中使用的老版本的和易受攻击的JavaScript框架/库非常重要。Retire.js是一个可以识别正在使用的JavaScript框架是否过时的工具。此工具可用作独立工具,浏览器扩展,grunt插件或Burp / ZAP扩展。如果你以用户驱动的方式执行测试,则RetireJS Burp扩展特别有用。尽管RetireJS可以产生一些误报,但RetireJS报告的并非易受攻击的漏洞。

1_yQ9ZE5hqtryY_wCYcoiQSQ.png

Burp套件扩展插件——RetireJS报告了一个过时的JavaScript库问题

结论

在这篇博文中,我们介绍了一种执行客户端JavaScript代码静态分析的通用方法。我们所介绍的只是一个工作流程,能够指导你从收集JavaScript文件开始到使用JavaScript代码查找安全问题。

参考

源链接

Hacking more

...