前言
在一次授权渗透测试项目中,客户只提供了一个后台管理系统的登录页面,没有提供任何测试账号。面对这种常见的“孤岛式”入口,我们如何突破认证、获取权限,并进一步探索系统功能呢?本文将结合一次实战案例,分享从前台登录到成功渲染后台功能菜单的完整思路与过程,其中的一些方法和思考或许能为你的测试工作带来启发。
1. 后台权限获取
首先映入眼帘的是一个标准的后台登录界面。

界面本身平平无奇。尝试对常见弱口令进行爆破,但没有收获,测试一时陷入僵局。
实际上,面对仅有登录页面且无测试账号的情况,我们可以尝试多种思路来获取后台权限,例如:
- 爆破常见弱口令。
- 在源码(如JS、HTML注释)中寻找硬编码的账号密码。
- 分析前端JavaScript的登录认证逻辑,判断是否为前端验证(例如依赖返回包中的特定字段值)或存在认证缺陷(例如仅需特定的HTTP Header)。
- 获取系统内其他角色(如普通用户、机构用户)或可注册的前台用户的认证凭据,尝试越权登录后台。
- 寻找隐藏的注册功能点。
- 从JavaScript文件中挖掘敏感API接口,并尝试直接调用。
- 在登录口尝试SQL注入等漏洞。
- 利用系统依赖的中间件或组件的已知漏洞。
在这次测试中,通过信息收集,我们发现了一个与Web后台系统同名的微信小程序。关键点在于,小程序与Web后台使用了相同的域名和核心认证体系。于是,我们尝试将微信小程序通过手机号快捷登录后获取的认证Token,替换到Web后台登录接口的响应包中。

通过抓包替换,成功“骗过”前端,触发了后续的后台API请求。

然而,浏览器页面却是一片空白,没有任何功能菜单显示。这通常意味着我们获取到的账号权限不足,导致后端没有返回高权限的菜单数据,前端因此无法渲染出任何功能模块。
2. 获取后台接口与数据
页面空白,但网络请求已经发出,这说明我们已经进入了“后台”,只是看不到“家具”。接下来的目标就是找到那些“隐藏的家具”——后台的功能接口。
2.1 常规思路:挖掘JS中的接口
最直接的方法就是分析前端加载的JavaScript文件,从中寻找潜在的后台API接口。即使当前账号无权访问,很多接口地址和参数定义也可能直接写在JS里。

挖掘JS时有个细节需要注意:页面默认加载的JS文件可能并不全。许多现代前端应用会使用代码分割(Code Splitting)技术,按需加载模块。

你可以通过搜索已发现的部分接口名,来查找其他未被加载的相关JS文件。将这些文件URL收集起来,用脚本批量访问,就能“提前”获取到更多的接口信息。这种方法简单直接,但缺点也很明显:如果接口的传参逻辑复杂且没有明文写在JS里,仅凭接口地址构造有效请求会比较困难。
2.2 寻找接口文档或相关接口
除了在JS里大海捞针,寻找接口文档(如Swagger UI)是更高效的途径。如果找不到标准文档,可以观察登录后浏览器发出的首个或关键的菜单请求。
例如,本次测试中,登录后浏览器发起了一个获取菜单的请求。


从接口名 initMenu 可以明确其作用。响应体为空,印证了账号权限不足的判断。那么,能否找到另一个返回完整菜单数据的接口呢?
首先分析 initMenu 接口的请求参数。通过浏览器开发者工具在相应加密函数处打上断点,可以获取到调用时的明文参数。

这里发现请求体是空的,意味着通过修改请求参数来获取更多数据的方法行不通。
接着,我们在全局代码中搜索与“Menu”相关的关键字,成功发现了一个名为 initMenutree 的接口,从命名上看,它很可能返回完整的树形菜单数据!

直接访问该接口返回400错误。这在意料之中,我们需要模仿 initMenu 接口的请求格式来构造请求。通过断点调试,我们获取了请求所需的签名参数。一个有趣的发现是,在测试时起初忘了对请求体进行加密,但后端竟然也正常处理了。

使用正确的参数发送POST请求后,我们成功获得了包含完整功能菜单树的响应数据!

思路很清晰了:将这个完整的菜单数据包,替换到我们低权限账号发出的 initMenu 请求的响应中,应该就能让前端渲染出功能页面。然而,替换之后页面依然空白。
3. 逆向前端逻辑,成功渲染页面
替换数据包失败,说明前端对这两个接口返回数据的处理逻辑可能不同。我们需要深入分析前端JavaScript是如何处理 initMenu 接口的返回值的。

关键代码在此:let data = res.data.data;
前端在渲染菜单时,直接从响应结果的 res.data.data 中取数据。
而我们之前从 initMenutree 接口获得的菜单数据,其完整路径是 res.data.data.tree。直接替换导致前端在 res.data.data 中找不到预期的数据结构,因此渲染失败。

问题根源找到了,解决方法也很简单:我们需要修改响应包,将 initMenutree 返回的 data.tree 内容,提升到 initMenu 接口期望的 data 层级。用更直白的话说,我们需要把 {data: {tree: [...]}} 的结构,改成 {data: [...]}。

通过抓包工具(如Burp Suite)拦截 initMenu 的响应,按照上述规则修改JSON结构后放行。刷新页面,期待已久的功能菜单终于成功渲染出来!

至此,我们不仅绕过认证进入了后台,还“解锁”了全部功能菜单的可见性,为后续深入的渗透测试和漏洞挖掘铺平了道路。后续的测试中,通过抓包分析,发现了多处垂直越权等常规漏洞,此处不再赘述。
总结与思考
本次测试流程可以概括为:信息收集发现同名小程序 -> 利用统一认证体系绕过Web登录 -> 分析前端逻辑寻找高权限数据接口 -> 修改接口响应数据结构欺骗前端渲染。
整个过程涉及了对前端应用架构、API交互逻辑和数据结构分析的深入理解。它提醒我们,在现代Web应用安全测试中,突破认证往往只是第一步。在“进入”系统后,如何利用客户端逻辑、挖掘隐藏接口、理解数据流转,是进一步发现深层次业务漏洞的关键。这种深入客户端逻辑的分析能力,是高级软件测试工程师和安全研究员的重要技能。
希望这个案例分享能为你带来一些新的测试思路。如果你对Web安全、漏洞挖掘有更多兴趣,欢迎到 云栈社区 与更多开发者交流探讨。