在一次外部资产探测中,发现了一个目标系统,但并未收集到可用的账号密码凭证。

在尝试对登录流程进行抓包分析时,请求直接返回了 HTTP 400 Bad Request 错误。
发现只需修改 Cookie 中的某个特定参数(例如 xxx),将其改为任意值,即可绕过这个限制,使抓包工具能够正常工作。

由于目标网站前端基于 Vue 构建,因此可以尝试绕过路由守卫,直接访问前端页面以测试潜在的未授权接口。利用 Vue Router 分析工具,可以轻松获取并访问系统内的路由地址。

在探索过程中,发现了系统管理功能模块。其他接口大多返回 401 未授权错误,但其中一个“用户查询”接口在点击查询后,页面弹出了“系统内部异常”的提示。
起初推测这可能也是未授权访问的一种表现,或许是缺少必要参数或参数错误导致的。但经过进一步测试,确认该接口本身存在损坏,属于服务端异常,而并非未授权问题。
既然发现了用户查询接口,那么与之对应的新增用户接口 /save 很可能也缺乏有效的权限控制。尝试将 URL 路径中的关键词替换为 save 进行访问。
访问 xxx/xxxx/save 后,服务器返回了提示信息:“姓名不能为空”。这说明接口可以访问且逻辑正在执行,当前只差构造正确的请求参数了。

由于在前端 JavaScript 代码中搜索不到该接口的相关调用代码,无法直接获取参数名,因此决定通过Fuzz(模糊测试)的方式来爆破出具体的参数名称。

这里使用了 Burp Suite 的 CaA(Collaborator and Analyzer)插件,并结合自定义的参数名字典进行自动化测试。

经过Fuzz,成功爆破出第一个参数:name(姓名)。

第二个参数是 role(角色)。

第三个参数为 branchOffice(行政区)。在测试过程中,尚未输入手机号,系统却返回了“手机号码已存在”的错误。这可能是后端校验逻辑存在瑕疵,但不影响我们继续Fuzz其他参数。

第四个参数是手机号,对应字段名为 tel。最终,通过渗透测试中的参数Fuzz,我们得到了新增用户接口所需的完整参数列表:
{
"userName": "",
"psd": "",
"name": "",
"role": "",
"branchOffice": "",
"phone": "",
"passWord": "",
"tel": ""
}
构造包含上述参数的POST请求后,系统返回了200状态码及“success”信息,表示新增用户成功。

使用新创建的用户账号成功登录系统后台,但初始权限较低,仅能访问如“食堂信息管理”等基础功能。

既然存在未授权的新增用户接口,那么很可能也存在对应的用户修改接口。尝试访问 xxx/xxxx/edit,服务器同样返回了“姓名不能为空”的提示,这与 /save 接口的行为非常相似。

再次通过Fuzz爆破修改接口的参数,最终得到的参数列表如下。其中,levelId 字段代表用户权限等级,这是实现权限提升的关键。
{
"id": "",
"userName": "",
"tel": "",
"levelId": "",
"passWord": "",
"branchOffice": ""
}
构造请求并成功调用修改接口,将测试账户的 levelId 提升为管理员权限对应的值。

再次登录系统,此时账户已具备完整的后台管理权限,可以访问如“供应商管理”等所有管理功能,从而实现了从普通用户到网站管理员的权限跨越。
