如何渗透测试基于 AngularJS 的 SPA(单页应用程序)

信息安全 渗透测试 angularjs
2021-08-20 17:44:54

我正在尝试测试一个内置 AngularJS 的应用程序我面临的困难

  1. Burp Suite 的“spider this host”选项无法抓取所有 url,因为大多数请求都是基于 AJAX 和 Angular 的。
  2. 当我尝试使用 Burp Suite 手动解析所有链接时。它只能解析主页链接。休息点击不会被拦截。
  3. 我无法获取用于各种布局的模板的内容。喜欢:“ App/src/dashboard/Menu/Menu.box.tpl.html”是Angular Directive中使用的模板之一。但是如何解析它的html内容。(就像我们为一般解析的 url 获取 html 源代码一样)。

在这里,Acunetix 有助于简要了解应用程序如何解析内容。但是对于手动渗透测试,我没有得到合适的解决方案,比如我应该使用哪些工具、方法等。

如果有人知道 Angular App 渗透测试方法,请指导我。

AngularJS 应用程序测试是否有任何链接/资源/教程?

2个回答

用于为财富 20 强应用程序供应商向财富 100 强客户教授应用渗透测试课程。多年前,此类评估的最新技术是OWASP Ajax Crawling Tool,其中必须手动输入所有 Ajax 参数和操作。

对于 AngularJS,Chrome 扩展商店中有 AngularJS Batarang Chrome 扩展——对于调试非常有用。如果您也碰巧遇到了 Node.js(很可能),那么您还可以利用Iron-node调试工具。如果您进行任何 Javascript 原型设计或开发,我还建议您查看 Atom 编辑器的ternjs(类似 Intellisense)插件。nVisium Security 写了一篇关于 AngularJS 中的一些安全问题的博文。Dinis Cruz 还定期撰写有关 AngularJS 的文章。

使用BurpKit可以更有效地工作单页应用程序,要获得有效的爬网,请查看htcap

感谢 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