渗透测试人员之 JavaScript 分析(一)

admin 2024年10月10日22:16:54评论27 views字数 3872阅读12分54秒阅读模式

如果您正在测试 Web 应用程序,您肯定会遇到很多 JavaScript。如今几乎每个网络应用程序都在使用它。Angular、React 和 Vue.js 等框架将 Web 应用程序的许多功能和业务逻辑放置到前端。因此,要彻底测试 Web 应用程序,您必须分析它们的客户端 JavaScript。

这篇文章向您展示了如何操作。它涵盖了静态和动态分析的基础知识,介绍了混淆和反混淆,并解释了如何绕过代码保护机制,同时给出了实际示例并为特定任务建议了适当的工具。

请注意,这篇博文相当长。您可以慢慢观看。现在,事不宜迟,让我们开始吧!

静态分析

静态分析是在不执行软件的情况下对软件进行分析。静态分析的目标可以有很多。代码中的 URL 可能会增加攻击面并暴露出损坏的访问控制。代码还可能包含密码、秘密或 API 密钥等敏感信息。此外,使用危险功能或过时的软件可能会给应用程序带来漏洞。

收集 JavaScript 代码

要执行静态分析,您首先需要收集 JavaScript 代码。我知道的最简单的方法是使用 Burp Suite,如下所示:

  1. 过滤代理 HTTP 历史记录以仅显示带有 js 扩展名的文件:

    渗透测试人员之 JavaScript 分析(一)

  2. 标记 JavaScript 文件和复制 URL 的结果列表:

    渗透测试人员之 JavaScript 分析(一)

  3. 将 URL 保存到文本文件:

    渗透测试人员之 JavaScript 分析(一)

  4. 用于wget -i urls.txt下载它们:

    渗透测试人员之 JavaScript 分析(一)

或者,您可以使用浏览器的开发者工具,逐个下载文件:

渗透测试人员之 JavaScript 分析(一)

识别端点

要发现 JavaScript 文件中的端点和参数,您可以使用LinkFinder。结果可以保存到 HTML 或打印到 stdout:

$ python linkfinder.py -i 'js/*' -o result.html
$ python linkfinder.py -i 'js/*' -o cli

与其他命令行工具的结合也可能是有益的:

$ python linkfinder.py -i 'js/*' -o cli | sort -u | grep rest
/rest/admin
/rest/captcha
/rest/chatbot
/rest/continue-code
/rest/continue-code/apply/
/rest/continue-code-findIt
/rest/continue-code-findIt/apply/
/rest/continue-code-fixIt
/rest/continue-code-fixIt/apply/
/rest/country-mapping
/rest/deluxe-membership
/rest/image-captcha/
/rest/memories
/rest/order-history
/rest/products
/rest/repeat-notification
/rest/saveLoginIp
/rest/track-order
/rest/user
/rest/user/authentication-details/
/rest/user/change-password?current=
/rest/user/login
/rest/user/reset-password
/rest/user/security-question?email=
/rest/user/whoami
/rest/wallet/balance

检测秘密

要检测代码中的秘密,您可以使用TruffleHog。早些时候,TruffleHog 专注于 git 存储库中的秘密。如今,它本身支持文件系统等。只要确保使用子命令即可filesystem。

$ ./trufflehog filesystem ~/Downloads/js --no-verification --include-detectors="all"
🐷🔑🐷 TruffleHog. Unearth your secrets. 🐷🔑🐷
Found unverified result 🐷🔑❓
Detector Type: AWS
Decode Type: PLAIN
Raw result: AKIAIOSFODNN7EXAMPLE
File: ~/Downloads/js/main.js

Burp Suite Professional 用户还可以使用JS Miner来检测端点和秘密。一旦 JavaScript 文件被被动分析,问题就会显示在 Burp Suite 的问题仪表板中。

渗透测试人员之 JavaScript 分析(一)

Burp Suite 的问题仪表板

根据我的经验,JS Miner 在检测 JavaScript 中的秘密和端点方面提供了最佳结果。

渗透测试人员之 JavaScript 分析(一)

检测到 JS Miner 的秘密

如果您正在搜索特定的内容,您当然也可以使用基本的命令行工具,例如grep. 您可能想尝试的关键词是:

password
admin
login
token
user
auth
key

定位危险功能

Semgrep是一个用于检测代码漏洞的开源分析工具。您可以配置自己的检测规则或使用社区创建的规则。这些不仅能够检测秘密,而且还能够检测潜在易受攻击的方法的使用:

渗透测试人员之 JavaScript 分析(一)

Semgrep 检测 JWT 和 innerHTML 函数

JavaScript 中有趣的函数和属性例如:

Element.innerHTML
eval()
window.postMessage()
window.addEventListener()
window.localStorage
window.sessionStorage
document.cookie

过时的库

过时的 JavaScript 库通常包含漏洞。一个常见的例子是jQuery。通常,您可以在库的路径或文件名中找到版本信息,或者在文件本身中以版本字符串的形式找到版本信息。

渗透测试人员之 JavaScript 分析(一)

路径和文件中的版本字符串

要检查漏洞是否已发布,您可以使用snyk.io等在线服务。

渗透测试人员之 JavaScript 分析(一)

来自 snyk.io 的 jQuery 2.2.4 结果

Burp Suite Professional 有一个内置的依赖性检查器,可以自动执行此过程。此外,还可以使用Burp Suite Professional 扩展Retire.js

渗透测试人员之 JavaScript 分析(一)

Retire.js 检测到过时的 jQuery 版本

注意:在报告之前,请验证该 Web 应用程序确实存在漏洞! 库中的漏洞通常仅影响特定功能。如果 Web 应用程序不使用这些函数,那么尽管包含该库,它也不容易受到攻击。使用上述方法在 Web 应用程序的 JavaScript 中搜索易受攻击的函数。

动态分析

动态分析是对软件执行过程中的分析。通常,您不想分析整个软件,而只想分析特定部分或功能。这使您可以重建其功能,并且优于复杂计算的静态分析。

基本工具

JavaScript 动态分析的基本工具是浏览器的开发人员工具。与 Firefox 相比,我更喜欢 Chromium 的开发工具,因为它们的性能更高。

您可以通过主菜单栏或按 F12 打开它们。

渗透测试人员之 JavaScript 分析(一)

在 Chromium 中打开开发者工具

这将在当前活动选项卡中打开一个工具栏。选择“来源”选项卡。

它由 4 部分组成:

  1. 当前页面的源文件

  2. 所选文件的内容

  3. 调试工具

  4. 交互式控制台(如果不存在则使用 ESC 打开)

渗透测试人员之 JavaScript 分析(一)

应用示例

我编写了一个小示例应用程序来演示基本技术。它具有简单的 ping 服务,您可以在其中输入主机并接收 ping 命令的输出。这样的服务应该容易受到命令注入的攻击。那么,让我们仔细看看。

渗透测试人员之 JavaScript 分析(一)

示例 ping 服务

客户端过滤

首先,我分析按下提交按钮时发送的请求。JWT被发送到服务器,其中包含要 ping 的主机等值。JWT 已签名。这使得我们无法在 Burp Suite 中操纵主机值或在不使签名无效的情况下有效地执行主动扫描。

渗透测试人员之 JavaScript 分析(一)

在 Burp Suite 中发送请求

127.0.0.1;id因此,我尝试从 Web 应用程序本身发送基本命令注入有效负载。下图显示了注射的工作原理。

渗透测试人员之 JavaScript 分析(一)

澄清命令注入并将有效负载插入输入字段

但特殊字符;在客户端会被过滤掉。hostJWT 内的值包含value 127.0.0.1id。

渗透测试人员之 JavaScript 分析(一)

Burp Suite 中过滤的请求

寻找切入点

为了分析按下提交按钮时发生的情况,我右键单击它并选择Inspect。

渗透测试人员之 JavaScript 分析(一)

检查 HTML 元素

这将打开开发人员工具中的“元素”选项卡。按钮的 HTML 不会显示任何内容,因为没有onclick属性。但选择“事件监听器”选项卡显示事件监听器已注册以调用 secure.js 第 3 行中的提交函数。

渗透测试人员之 JavaScript 分析(一)

开发者工具中的“事件监听器”选项卡

我通过单击 的链接切换回“源”secure.js选项卡。为了分析该函数,我通过单击左侧的行号在第 4 行中创建了一个断点。断点显示在右侧的工具栏中。

渗透测试人员之 JavaScript 分析(一)

“源”选项中的断点

调试器

我再次单击“提交” 。JavaScript 执行在第 4 行停止,调试器启动。我通过按 F9 或单击工具栏顶部的相应符号来逐步执行特定的 JavaScript 语句。

渗透测试人员之 JavaScript 分析(一)

用于单步执行指令的调试器工具

在每个包含变量的语句之后,执行后其内容会显示在其旁边,并以黄色突出显示。正则表达式似乎删除了所有特殊字符,但._-.

渗透测试人员之 JavaScript 分析(一)

变量值显示在调试器内

在将清理后的主机值作为有效负载提交给 JWT 之前,我使用工具栏的“范围”部分将变量的值更改回原始输入。

渗透测试人员之 JavaScript 分析(一)

将值改回127.0.0.1;id

点击播放按钮将恢复代码正常执行,并显示命令注入成功。

渗透测试人员之 JavaScript 分析(一)

id命令的结果

一般建议

另外三点注意:

  1. 为了检测入口点,有时通过工具栏在任何 XHR/fetch上设置断点会很有帮助。这样,执行会在发送 XHR 之前暂停,并显示先前语句的所有计算变量。

    渗透测试人员之 JavaScript 分析(一)

  2. 签名密钥当然也存在于 JavaScript 中。可以在 Burp Suite 中提取并使用它来计算正确的签名。我将在后续主题中介绍这一点。

  3. DOM Invader是 Burp Suite 内置浏览器的扩展,有助于测试 DOM XSS。像往常一样,PortSwigger 的资源非常好.

原文始发于微信公众号(红队笔记录):渗透测试人员之 JavaScript 分析(一)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月10日22:16:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透测试人员之 JavaScript 分析(一)https://cn-sec.com/archives/1922583.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息