感谢 atdre 的开幕。
在这一点上,渗透测试 JavaScript 应用程序已经变得非常复杂。较新的 Web 架构本质上已成为容器。现在有些人会争论我使用的术语,但这个想法仍然很简单——网络应用程序现在在对象中运行。
对我们扫描和渗透测试应用程序方式的影响会受到很大影响。简单地说,通常的网络代理方法不再适用了。从 Burp 到 Zap、Charles、AppScan 和许多其他工具——当涉及到丰富的 JavaScript 应用程序时,这些工具越来越受到限制,包括 Angular、Node.js 和许多其他库和架构(前端和后端)。
在去年尤其如此,我们现在必须在浏览器和更现代的工具和方法中使用 Web 控制台,因为应用程序仅或大部分在后端和前端运行。我们不再从服务器和客户端来回获取这些信息了——至少,越来越少。
由于 JavaScript 本质上是在客户端/用户浏览器中运行的,因此我在最后一次渗透测试(12-24 个月)中看到了这种现实的增强。我越是试图拦截和玩弄两者之间的通信……我看到的也就越少。
在此说明中,我的大部分流程都需要“升级”和更新。
因此,我现在最常使用工具运行录制的会话。此示例之一是使用 Burp 记录器。在去年,它进行了重大更新,可以记录网络会话,而不仅仅是登录序列。只需导入。
这种方法有能力让工具记录一个真实的用户会话(想想 selenium 脚本),然后用包含的数据和“实时”用户和数据流重放这个会话。
请记住,随着更复杂的 JavaScript 在浏览器中运行,您将看到流程和相关数据和逻辑的唯一方法是在 Web 会话本身中!从一个会话到另一个会话,您可能会在此过程中获得更多视角。这很疯狂,很长,是的,有时非常令人沮丧。
是的,在某些时候你会看到后端服务器或 API 的通信离开,但大部分逻辑和处理已经在浏览器中完成(输入、验证、构造、规则、变量等)。
现在这意味着我们不能依赖“简单”代理或插件来进行拦截、操作或类似操作。再一次,也许你会看到偶尔的通讯出去,但不像我们以前看到的那样。
所以我目前最大的建议是这个。记录、回放和重复使用(清洗、冲洗和重复)并坚持浏览器 Web 控制台(检查版本、变量、功能和规则)。相信我,理解应用程序流程需要时间,肯定比简单的拦截要长。
我们现在必须深入挖掘 JavaScript 代码,并希望团队和工具能够使用现代扫描仪进行更新,因为这正在成为一项艰巨的手动任务。过去需要几个小时的事情现在可能需要一个星期。
作为我测试的大多数应用程序 - 我不认识他们。所以我认为快速黑盒测试已经成为过去。我们现在必须更深入地编写代码和流程才能获得结果。
一些链接可以帮助...
https://forum.portswigger.net/thread/burp-seems-not-able-to-crawl-html-in-angular-js-application-9b9a9a2b
https://forum.portswigger.net/thread/singe-page-application-built-using-angular-js-6-e9a88e65
https://blog.nvisium.com/angular-for-pentesters-part-2