一次VUE环境下的渗透测试

admin 2025年4月21日22:29:37一次VUE环境下的渗透测试已关闭评论7 views字数 2643阅读8分48秒阅读模式

测试过程

很久之前的一次测试,目标网站界面如下

一次VUE环境下的渗透测试

点击哪个地方都是跳转到登录界面,只能验证码登录,也没有注册功能

一次VUE环境下的渗透测试

打开F12看下js文件,一眼就是VUE的框架

一次VUE环境下的渗透测试

先打开这个js文件,复制最后那一段字符

一次VUE环境下的渗透测试

来到前面那个界面进行全局搜索,可以看到所有的js文件

一次VUE环境下的渗透测试

全部复制下来,然后改下格式

一次VUE环境下的渗透测试

写个pyton脚本提取下接口
一次VUE环境下的渗透测试

放到bp里批量跑一遍,存在一个接口返回了所有的文件信息,数量还不少,返回的url路径直接拼到网站后面即可访问

一次VUE环境下的渗透测试
一次VUE环境下的渗透测试
这里猜测肯定有删除文件的接口,可能也没有做鉴权,去我们提取到的接口列表里搜一下file-bean这个词,很明显这应该就是删除接口
一次VUE环境下的渗透测试

直接请求的话返回后台出错,很明显是缺少参数,这里直接把上面获取的文件信息复制过来就行

一次VUE环境下的渗透测试

返回成功,再去返回所有文件信息的接口查看,这个文件已经被删除了,证明漏洞存在

一次VUE环境下的渗透测试

这种爬的接口是没有参数的,还有一种思路就是直接在控制台使用下面脚本可以输出路由,仅对部分网站生效还有可能不全,想要获取全部的路由要使用
Vue.js
devtools调试工具,感兴趣的可以自己去搜索下

function findVueRoot(root) {  const queue = [root];  while (queue.length > 0) {    const currentNode = queue.shift();    if (currentNode.__vue__ || currentNode.__vue_app__ || currentNode._vnode) {      console.log("vue detected on root element:", currentNode);      return currentNode    }    for (let i = 0; i < currentNode.childNodes.length; i++) {      queue.push(currentNode.childNodes[i]);    }  }  return null;}function findVueRouter(vueRoot) {  let router;  try {    if (vueRoot.__vue_app__) {      router = vueRoot.__vue_app__.config.globalProperties.$router.options.routes      console.log("find router in Vue object", vueRoot.__vue_app__)    } else if (vueRoot.__vue__) {      router = vueRoot.__vue__.$root.$options.router.options.routes      console.log("find router in Vue object", vueRoot.__vue__)    }  } catch (e) {}  try {    if (vueRoot.__vue__ && !router) {      router = vueRoot.__vue__._router.options.routes      console.log("find router in Vue object", vueRoot.__vue__)    }  } catch (e) {}  return router}function walkRouter(rootNode, callback) {  const stack = [{node: rootNode, path''}];  while (stack.length) {    const { node, path} = stack.pop();    if (node && typeof node === 'object') {      if (Array.isArray(node)) {        for (const key in node) {          stack.push({node: node[key], pathmergePath(path, node[key].path)})        }      } else if (node.hasOwnProperty("children")) {        stack.push({node: node.childrenpath: path});      }    }    callback(path, node);  }}function mergePath(parent, path) {  if (path.indexOf(parent) === 0) {    return path  }  return (parent ? parent + '/' : '') + path}function main() {  const vueRoot = findVueRoot(document.body);  if (!vueRoot) {    console.error("This website is not developed by Vue")    return  }  let vueVersion;  if (vueRoot.__vue__) {    vueVersion = vueRoot.__vue__.$options._base.version;  } else {    vueVersion = vueRoot.__vue_app__.version;  }  console.log("Vue version is ", vueVersion)  const routers = [];  const vueRouter = findVueRouter(vueRoot)  if (!vueRouter) {    console.error("No Vue-Router detected")    return  }  console.log(vueRouter)  walkRouter(vueRouter, function (path, node) {    if (node.path) {      routers.push({name: node.name, path})    }  })  return routers}console.table(main())
输出结果如下图
一次VUE环境下的渗透测试
将上面挨个拼接到#后面测试,发现下面这个页面有个添加照片的功能点,可以直接调起后端接口
一次VUE环境下的渗透测试
这里可以直接上传svg格式文件,直接拼接路径就能访问触发xss
一次VUE环境下的渗透测试

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月21日22:29:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次VUE环境下的渗透测试https://cn-sec.com/archives/3980571.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.