VUE|如何不使用Fuzz得到网站所有参数与接口?

文摘   2024-12-14 23:34   江苏  

  

访问某VUE站点,发现直接重定向要求从飞书登陆,立马抓包丢掉请求了。

imagecopy

使用JS替换在本地调试修改尝试绕过

image copy 2

直接全局搜索跳转到url找到原因, 把这个注释掉并保存,重新刷新进入。

image

接着又发现无限重定向到主页,然后打开console发现最后一个提示是401,仅接着又重现location到到根目录了。

image copy 3

在控制台看见最后的请求是api/user/info,搜一下是什么发起的

e.headers.common.Authorization = "Bearer " + Object(o["b"])(),
        e), e=>{
            console.log(e),
            Promise.reject(e)
        }
        ),
        c.interceptors.response.use(e=>(e.request.responseType,
        e.data), e=>(401 === e.response.status && (Object(o["c"])("code"),
setTimeout(()=>{
  location.reload()
        }
        , 4e3)),
  console.log("err" + e),
        Promise.reject(e))),
 
image-1

原来是有一个判断401的定时任务执行 location.reload()

直接注释掉

image-3

ok不执行reload()了,但是也不继续走了,没有画面了😭


既然401reload() 那么200 会发生什么?我这里直接点击at XMLHttoRequest.m 的报错来到请求发出处对status code 进行修改,当然也可以直接选择使用burp替换。

image-2

我选择直接把status写得200

a = {
data: i,
status200,
statusText: h.statusText,
headers: r,
config: t,
request: h
};

console依然是401的报错,但是多了一条别的报错,说明代码继续往下走了。

image-4

提示TypeError: Cannot read properties of undefined (reading 'staff_id')说明无法读取t.profile对象的staff_id属性。

断点查看一下t

image-5

应该是在请求认证接口返回的一些数据结构,但是我并没修改返回的response,只是对status code 做了修改,其他的数据哪里来的呢?

向上回溯发现一些地方也是做了处理。

image-6

当然这些都不重要,即使有了数据也不一定是正确的,后端如果做了鉴权,伪造的数据是肯定无法通过的。我们的目的是欺骗前端。

先简单的统统杀掉staff_id, 就是那里报错删那里,最后什么name/avatar之类的报错都删除了,只留下了e.profile

终于出画面了,也出新错误了😭

image-7

又是提示Cannot read properties of undefined (reading 'xxxx')

e.data的规律应该是从某个接口的responses中读取公司和部门列表做展示,这里依然是直接做删除处理✖️

结果如何请看VCR🎬

image-9

好了不报错了,收工。忙活了半天发现做了个空页面展示。


即便是没有公司部门数据也不至于什么功能都没有展示啊???肯定在哪里还有逻辑判断 下个断点往回追一追看(其实上面某处已经出现过了)。

最后发现在create方法下有admin相关的字眼

image-11
  methods: {
    loadRoute(e) {
    var t = !0;
    e.forEach(e=>{
      ("recruit" === e || this.$store.state.user.staffAuth.includes("admin") || this.$store.state.user.staffAuth.includes(e)) && (t = !1)
    }
    ),
    t && (window.location.href = "/#/home")
}
}
        

在这里有一个路由守卫判断权限,遍历判断权限是否为e是否为recruit或staffAuth包含admin,如果条件成立则设置  t = !1

结果修改完发现依然是空白展示,压根没走到t = !1这个地方判断。

image-13

如何仔细阅读代码其实根本不用走到这一步就能展示路由了,写到到这的原因完全是因为补控制台的报错🤣


应该是在请求认证接口返回的一些数据结构,但是我并没修改返回的response,只是对status code 做了修改,其他的数据那里来的呢?向上回溯发现一些地方也是做了处理。

让我们回到上面👆这一部分重新开始。

首先这里异步获取了h["a"].state.user.staffAuth用户权限的属性,并存储在e中,接着访问了 /permission/generateRoute/ 路由生成接口将用户权限传入。

最后执行addRoutes(e) ,所以这里应该是关键点,判断权限并添加路由。

image-14

断点得到了一个存储了路由信息的数组,并且有个"hidden":true属性,这应该就是控制展示的参数。这里选择继续深入,看看是哪里判断hidden是false还是true的。

这里需要了解VUE相关知识,.dispatch 用作于分发 action , 一直跟进到原生的vuex.min.js 中拦截,看看这个 /permission/generateRoute/绑定的是什么action

image-15

最后得到这么一个action : s 的东西, s命名为generateRoutes

code-1

断点发现r路由信息是由i(n["a"], t); 返回的

image-16

跟进i  发现组建设置hidden的判断点("recruit" === t || a.includes(t)) && (e.hidden = !1), a.includes("admin") && "other" !== t && (e.hidden = !1)

code-2

直接注释掉设置为 e.hidden =!1

image-18

收工,点点点半天功能发现所有接口都没有未授权,白干一天。

错了,是好几天,还写了好几天😭

如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款

往期回顾

一款bp神器

ssrf绕过新思路

一个辅助测试ssrf的工具


dom-xss精选文章

年度精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips





迪哥讲事
作者主页: https://github.com/richard1230
 最新文章