通过 VUE 前端 JS 调试来寻找未授权访问漏洞

0 阅读5分钟

众所周知,在做渗透测试的时候,想要测试一个站点有没有未授权,那么一般有两种方式:

  1. 没有账号的情况下,自己看 js 代码,然后找到接口、找参数,这种方法费时费力,而且大概率找参数很困难,而且碰上参数加密的那就更头疼了。
  2. 有账号的情况下,使用 burp 插件,直接在功能点上点点鼠标,burp 插件自动就帮我们测试了,而且前端页面自动帮忙组合参数、接口、数据包了。

那么有没有第三种方法呢,我们没有账号,但是我还想点点鼠标就把未授权给测试了?

这里可以肯定的说,有,但不完全有。

如果你现在测试一个 VUE 的站点,因为现代前端技术的发展,一般情况下,在访问登陆页的时候,其实就把所有的 js 文件都请求了,并且后端的接口的 URL、参数其实都已经在这些 JS 里面了。

如果这个时候,我们能通过替换 js 的情况下, 将 VUE 代码中的路由守卫给修改掉,然后在前端页面里,绕过登陆界面,进入后台,然后就可以在后台里面点点点了,系统就会自动帮我们发起 API 调用,自动组装数据包了。

但是为什么说,不完全有呢, 事实上,每个系统的代码可能都不一样,至于如何修改前端页面中的鉴定权限的代码,这是一个很大的问题,但是呢,这些都是后续要考虑的事情,我们先来看看,如果随心所欲的修改目标网站的 JS 文件。

JS 文件替换

首先我们可以通过 URL 中 #/xxx 来定位路由判断的大概位置

image.png

我测试的这个网站有 webpack 泄露,那就更好办了。但是我们先不讨论 webpack 源码泄露的问题,我就当没看见。

image.png

首先我们打开 F12, 然后选择 源代码,确定自己想要修改那个 JS,然后在这个 js 上面右键,然后点击替换内容。

image.png

这个时候系统会让你选择文件夹,你点击选择文件夹,然后选一个就好。

image.png

然后我用 webstorm 打开了刚才选择的文件夹,就可以看到,我们要更改的 js 文件就躺在这里了,这样我们就算去刷新网页,网页加载的 js 也会被替换为我们的 js, 所以我们就可以想怎么改就怎么改这个 js 文件了。

当然,你也可以不用 webstorm 编辑这个文件,你用其他的编辑器也可以,或者干脆在浏览器的开发者工具里直接编辑都是可以的。

image.png

然后当你不想替换了,直接点击这个取消按钮即可:

image.png

接下来就是:调试页面、根据代码逻辑修改 js 代码、解决报错.....等等内容了,等到解决了路由拦截的问题,进入了后台主页,就可以很舒服的点点鼠标功能按钮,测试未授权了。

修改 JS 代码逻辑

比如这里我遇到一个站点,他本来 js 逻辑中,当我们访问 index.html 时,js 需要从 sessionStorage 中获取 Autorization 的值,如果没有的话,就重定向到 denglu.html 页面去了。那么我这里直接把这个代码逻辑给注释掉后,当我们访问 index.html ,系统就不跳转了,就留在我访问的页面了。 image.png

这样就看到后台的前端页面了。 image.png

当然,我这个例子很简单,而且代码也不是混淆后的代码,但是道理都是一样的,都是找到对方代码中的控制逻辑,然后修改成我们想要的就行了。

再举一个例子:

image.png

在这个系统里,我发现 1317 行是判断跳转登陆的逻辑,我这里直接给改掉,然后就能进入首页了

直接给改成n():1!==0.indexOf(e.path)?n():(n(),T.a.done()) 就可以了

image.png

可惜这个系统的菜单是登陆后在去向后端请求的,但是右上角还有个个人中心可以点开,然后可以上传头像。

再举个例子:

在这个系统里,我发现,当 hash 变化的时候,调用 m() 函数来进行权限的判断, 这太好了,直接注释掉。 image.png

image.png

结果发现,不行!这个 js 请求的形式是 xxx.js?123123123123 这样的 后面数字是时间戳,就算替换了这个 js 文件,因为我们改的这个时间戳和下次请求的js时间戳不一样,下次刷新就不是这个我们改的 js 文件了,又会请求服务器里的 js 了,真是服了啊。 不过好在这段代码不长,我们直接用 burp 的替换功能,把这一段加上注释。

image.png

image.png

成功进入后台的前端页面。

拦截跳转

我在测试这个网站时,还需要一个问题,就是当访问 index.html 时,几毫秒内就跳转到 login.htnl 了,完全不给我查看 JS ,修改 JS 的事件,这该咋办呢?

image.png

我们这里可以先打开 F12 然后点击源代码,然后在事件侦听器 --> 加载 --> beforeunload 打上对号。

然后再访问 index.html 等断点停下后,我们就可以使用前面的方法,进行 JS 的替换、JS 代码的逻辑修改。