本文记录了一次攻防演练中,针对一个前端为Vue框架的Web应用,通过静态分析和动态测试相结合,发现并利用未授权接口漏洞,最终获取大量敏感数据的过程。
本次演练的目标是一个标准的登录页面。在初步信息收集阶段,识别到前端框架为Vue。对于这种前后端分离的应用,测试的重点往往会放在API接口的鉴权机制上。

初步发现:可疑的接口路径
首先,我们尝试通过浏览器的开发者工具(F12)查看前端源码。在查看过程中,一段代码引起了我们的注意:一系列看似系统功能的API路径被直接硬编码在前端。这些路径(如 /table/delete, /examineBatch)通常对应着后台管理功能,如果缺乏有效的鉴权,就可能存在未授权访问风险。

工具辅助:使用 VueCrack 定位未授权路由
为了更系统地识别Vue应用的路由,我们使用了专为 Vue 2/3 设计的工具 VueCrack。这款工具能够自动识别Vue应用,并尝试获取其路由信息,对于快速发现潜在的未授权访问点非常有帮助。
下载地址:https://github.com/Ad1euDa1e/VueCrack
运行工具后,它成功地分析出了该应用的路由结构,并清除了路由守卫。从输出结果来看,工具识别出了一系列“标准URL”,例如 /dataManage, /dataView 等。这为我们后续的直接访问测试提供了明确的路径列表。

漏洞验证:直接访问与功能测试
我们随机选择了工具列出的一个路径 /dataManage 进行访问。虽然页面成功加载,但初始状态下并未显示具体数据。

接下来,我们尝试点击页面上的“查询”功能。令人意外的是,点击后系统竟然返回了查询结果,完全绕过了登录验证。这意味着该功能点对应的后端接口存在未授权访问漏洞。数据显示,单页有10条记录,总页码高达4104页,这意味着潜在的数据量可能超过4万条。

深度挖掘:定位更多后端API
既然一个功能点存在未授权问题,那么整个系统的鉴权机制很可能存在普遍性缺陷。我们回到最初的思路,在前端源码中搜索更通用的接口标志。由于这是一个前后端分离的应用,后端接口通常有统一的前缀,例如 /api。
在源码中搜索“api”关键字,我们发现了更多以 list 结尾的接口函数定义,例如 getDisassembleList, 并且明确标明了是 X.post 请求。如果能成功调用这些接口,预计能获取更多数据。

关键点:在测试这些接口前,必须注意接口的完整路径。通过抓包分析登录请求和之前成功的查询请求,我们发现所有后端接口都统一挂载在 /api 路径下。因此,实际调用时需要加上此前缀。
以之前成功的查询功能为例,抓包得到其请求如下:

模糊测试:批量探测未授权接口
基于已发现的接口特征(/api/xxx/list 格式的POST请求),我们使用工具对类似路径进行了一轮模糊测试。结果显示,多个接口都返回了状态码200和大量数据,证实了未授权漏洞广泛存在。

意外之喜:参数处理不当导致数据全量泄露
在分析其中一个数据接口时,我们发现了一个更有趣的现象。该接口原本的请求包体包含分页等参数,返回的是分页后的数据。但当我们尝试移除所有请求参数,只发送一个空的POST请求到该接口时,服务端的行为出乎意料。

它没有返回错误,而是返回了未经分页的全量数据!一次请求就返回了超过18万条记录。这暴露了后端在处理请求参数时的逻辑缺陷:当缺少分页参数时,没有进行安全校验或使用默认安全值,而是直接执行了查询全表的操作,造成了严重的数据泄露。

总结与反思
本次案例清晰地展示了在渗透测试中,针对现代前后端分离应用的常见突破口:
- 前端信息泄露:Vue等框架的路由、API信息可能暴露在前端代码中。
- 鉴权缺失:后端接口未能对每一个请求进行有效的身份和权限校验。
- 参数处理不当:对客户端传入的参数缺乏严格的校验和容错处理,可能引发越权或数据全量泄露。
这类漏洞的危害性极高,攻击者可以在未登录的情况下,直接操作后台功能、窃取全量业务数据。对于开发者而言,必须在后端对每一个接口实施严格的、统一的鉴权中间件,并对所有输入参数进行有效性校验。
对安全感兴趣的读者,可以关注云栈社区的安全板块,那里有更多关于漏洞原理、工具使用和防御方案的深度讨论与技术分享。