声明:本文所有内容仅用于授权渗透测试与网络安全学习研究,禁止用于任何非法用途。
前言
在 Web 安全测试中,登录接口往往是第一道关卡。很多网站为了防止密码明文传输,会在前端使用 JavaScript 对密码进行加密。本文将通过两个具体的靶场案例,演示如何从发现加密、调试代码到最终实现自动化爆破的全过程。
一、 寻找入口:发现加密特征
一切始于对目标的观察。我们需要确定目标是否存在加密,以及加密发生的位置。

(说明:展示靶场登录界面,输入用户名 admin 和密码)
首先,我们在登录页面输入测试账号(如 admin)和密码。为了看清数据传输的细节,我们需要打开浏览器的开发者工具。

(说明:展示按 F12 打开开发者工具)
按下 F12 键打开开发者工具,切换到 Network(网络) 面板。这里记录了浏览器与服务器之间所有的通信请求。当我们点击"提交"按钮后,观察发出的 POST 请求。

(说明:展示抓包结果,红框圈出 password 参数是一串乱码/密文)
在请求详情中,我们可以清楚地看到 password 字段的值并不是我们输入的明文(如 123456),而是一串毫无规律的字符(例如 96e792...)。这说明前端 JavaScript 代码在发送请求前拦截了表单数据,并对密码进行了加密处理。这就是我们要攻破的"入口"。
二、 定位源码:断点调试的艺术
找到加密参数后,下一步是定位生成该参数的核心代码。

(说明:展示在 Sources 面板找到 index_03.php,高亮显示 onclick 事件及 md5 函数调用)
我们在 Sources(源代码) 面板中找到对应的页面文件(如 index_03.php)。通过搜索关键词或阅读代码,我们定位到了点击事件监听器。可以看到代码中有一行 var md5_password = md5(password);,这暗示了加密算法可能是 MD5。为了验证这一点并查看中间变量,我们在这一行打上断点。

打好断点后,重新点击登录,程序会暂停运行。此时我们需要用到调试工具栏上的按钮。特别是 "下一步" (Step Over) 和 "步入" (Step Into),它们是追踪代码执行流程的关键。

程序在断点处暂停,此时我们可以看到变量 password 的值还是明文 111111。这说明加密操作尚未执行。
点击"下一步",当前行的代码执行完毕。如果我们想深入探究 md5() 函数内部是如何工作的,就需要点击"步入"按钮。

点击"步入"后,程序直接跳进了 md5.min.js 文件内部。这证实了我们的猜想:该网站确实使用了标准的 MD5 算法对密码进行哈希处理。既然算法已知,我们就可以在本地模拟这个过程。
三、 场景实战一:MD5 加密的爆破
确认了加密方式为 MD5 后,我们用yarkit进行爆破

选择MD5编码


配置完成后发送请求。工具会自动遍历字典,计算 MD5 并发包。观察响应包,当看到 login success 字样时,说明我们成功猜解出了密码。
四、 场景实战二:Base64 编码的识别与利用
接下来我们换一个靶场环境(login_04.php),看看遇到不同的加密该怎么办。


我们需要调整攻击策略。在工具的载荷处理规则中,将编码器从 MD5 切换为 Base64 编码。

再次发送请求。这一次,工具会对字典中的密码进行 Base64 编码后再发送。很快,响应包中再次出现了 login success,爆破成功!
五、 总结
通过以上两个案例,我们完整体验了 JS 逆向的标准流程:
-
抓包确认加密事实。
-
源码审计定位加密函数。
-
调试理解参数传递过程。
-
工具模拟实现自动化测试。