Skip to content

Em17b/Vue_optimized

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Vue Router 路由提取 & 越权访问测试脚本

一个用于 已授权 Vue.js 站点渗透测试的浏览器控制台脚本。 自动提取前端路由、遍历访问隐藏/特权页面、扫描敏感信息泄露,辅助发现 越权访问(Broken Access Control) 漏洞。


目录


简介

很多 Vue SPA(单页应用)会把所有路由(包括管理后台、特权功能)都打包进前端 JS。即使菜单不显示,路由仍然存在。本脚本通过读取 Vue 运行时实例,自动提取这些路由并逐一访问,帮助快速发现:

  • 前端未做权限控制的隐藏页面
  • 可越权访问的管理/特权功能
  • 页面加载后泄露的敏感信息(Token、API Key、内网地址等)
  • 更多可深入测试的面(文件上传、JS 泄露、内部接口等)

适用 Vue 2 / Vue 3,自动识别版本与 Router 实例。


原理

1. 遍历 DOM 查找 Vue 根节点 (__vue__ / __vue_app__ / _vnode)
2. 从根节点提取 Vue Router 实例及其 routes 配置
3. 递归遍历路由树, 合并父子路径, 去重
4. 处理动态路由 (:id / * / (.*)) -> 填充测试值
5. 逐条调用 router.push() 跳转访问
6. 每次跳转后扫描页面脚本/DOM 中的敏感信息

由于直接读取的是运行时内存中的路由表,无需手动翻 JS 文件即可拿到完整路由清单。


使用场景

场景 说明
越权访问测试 普通用户身份登录后,运行脚本遍历所有路由,观察哪些本应受限的页面能直接打开
未授权访问测试 未登录状态下运行,若跳转登录页则配合代理替换响应(见下文),尝试绕过前端鉴权
路由资产收集 仅提取路由清单(关闭自动跳转),作为后续接口测试、目录爆破的输入
敏感信息泄露排查 遍历各页面时自动扫描 Token / API Key / 内网 URL / 私钥等泄露
扩大测试面 进入隐藏页面后,进一步发现文件上传、富文本、调试接口等可深入测试的功能点

快速开始

  1. 用浏览器打开目标 Vue 站点(建议已登录测试账号)。
  2. F12 打开开发者工具,切到 Console(控制台) 标签。
  3. 打开 Vue_optimized.txt复制全部内容粘贴进控制台,回车执行。
  4. 观察控制台输出:版本信息、路由清单、跳转日志、敏感信息扫描结果。

若控制台提示「禁止粘贴」,按提示输入 allow pasting 后再粘贴。


配置说明

脚本顶部 CONFIG 对象集中管理所有开关,按需修改:

const CONFIG = {
  autoNavigate: true,        // 是否自动遍历路由 (false = 仅提取并打印路由, 不跳转)
  navDelay: 2000,            // 每次跳转间隔 (毫秒); 页面重/接口慢时可调大
  scanSecrets: true,         // 跳转后是否扫描敏感信息
  skipDynamic: false,        // true = 跳过动态路由; false = 用测试值填充 :param / *
  dynamicParamValue: '1',    // 动态参数 (:id 等) 的填充值
  dynamicWildcardValue: 'test', // 通配符 (* / (.*)) 的填充值
};

常见调整建议:

  • 只想拿路由清单、不想真实跳转 → autoNavigate: false
  • 页面跳转太快来不及观察 → 调大 navDelay(如 4000
  • 动态路由(如 /user/:id)想用真实 ID 测越权 → 改 dynamicParamValue 为目标账号 ID
  • 不需要扫描、只测访问 → scanSecrets: false

输出说明

输出项 含义
[+] Vue 版本 检测到的 Vue 版本(2/3)
[+] 共提取到 N 条路由 表格形式展示 raw(原始路径) / nav(实际跳转路径) / dynamic(是否动态) / name(路由名)
纯文本路由列表 可直接复制的路由清单(每行一条)
window.__vueRoutes__ 路由数组已挂到 window,可在控制台手动取用
[->] (i/N) 跳转: xxx 正在跳转到某路由
[SECRETS] xxx -> 发现 N 处 在该页面发现的可疑敏感信息(表格展示类型与匹配值)

敏感信息扫描覆盖类型: API Key、Token / JWT、Secret、Password、内网 URL(localhost / 内网段)、AWS AccessKey、私钥(PRIVATE KEY)、内部接口路径(/api /admin /internal /debug /actuator /swagger)。


配合中间人代理使用

未登录访问时被强制跳转到登录页,可借助中间人代理(Burp Suite / mitmproxy / Yakit 等)篡改响应,绕过前端鉴权逻辑,从而访问目标页面:

思路

前端鉴权通常体现在:

  • 路由守卫(router.beforeEach)里判断登录态/角色后 next('/login')
  • 接口返回 401/403 后前端重定向
  • JS 中的权限判断逻辑

代理替换的目标,就是把这些「跳转登录 / 拦截」的逻辑或数据改掉。

常见替换方式

  1. 改路由守卫逻辑:拦截主 JS(bundle),把判断登录的代码(如 if(!token) next('/login'))替换为放行,或把 next('/login') 替换为 next()
  2. 改鉴权接口响应:拦截 /api/user/info/api/permission 等接口,把 code:403 改成 code:200、把空权限列表改成完整权限列表、把 role: user 改成 role: admin
  3. 伪造登录态:在响应里注入 / 不清除 token,使前端误判为已登录。

验证关键

前端能打开页面 真正越权。后端接口仍可能独立鉴权返回 403/空数据。 必须观察页面实际加载出的数据:若后端也返回了本不该看到的数据,才构成真实越权漏洞。


典型工作流

┌─ 1. 登录测试账号 (低权限用户)
│
├─ 2. 控制台运行脚本, 提取全部路由
│
├─ 3. 观察自动跳转: 哪些管理/特权页面能直接打开?
│     └─ 能打开且有数据 -> 疑似水平/垂直越权
│
├─ 4. 注销 / 未登录状态再跑一次
│     └─ 被踢回登录页 -> 上代理替换响应 -> 再访问
│
├─ 5. 进入隐藏页面后扩大测试面:
│     ├─ 敏感信息泄露 (脚本自动扫描)
│     ├─ 文件上传点
│     ├─ 调试 / swagger / actuator 接口
│     └─ 内部 API
│
└─ 6. 对每个可疑点, 抓包确认后端是否真正放行 (确认漏洞)

常见问题 FAQ

Q: 提示「未检测到 Vue」? A: 站点可能不是 Vue,或 Vue 实例未挂在 document.body 子树。可尝试在 React/其它框架站点上本脚本无效。

Q: 提示「未检测到 Vue Router」? A: 站点用了 Vue 但没用 vue-router(或自实现路由)。此时无路由可提取。

Q: 路由提取到了,但「无法自动跳转」? A: 未拿到可用 router 实例(push 方法)。路由清单仍会输出,可手动逐个访问,或通过 window.__vueRoutes__ 取用。

Q: 跳转了但页面没变化 / 闪回登录页? A: 被路由守卫拦截。需配合代理替换响应(见上文),或先确保已登录。

Q: 动态路由 /user/:id 怎么测? A: 默认用 dynamicParamValue('1')填充。测越权时改成其他用户的真实 ID,观察能否访问他人数据。

Q: 会不会误触危险操作(删除等)? A: 脚本只做 GET 式页面跳转(router.push),不主动提交表单。但部分页面 onMounted 可能自动发请求,生产环境慎用,建议在测试/预发环境操作。


免责声明

  • 本工具仅供 已获得明确书面授权 的安全测试、漏洞研究与学习使用。
  • 严禁用于未授权的系统。未经授权的访问、测试或攻击属于违法行为。
  • 使用本工具产生的任何后果由使用者本人承担,作者不承担任何责任。
  • 请在合法合规的前提下使用,遵守当地法律法规及相关授权协议。

About

Vue Router 路由提取 & 越权访问测试

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors