记一次bypass前端验证+后端缺陷_集群智慧网络安全云
全国客户服务热线:4006-054-001 疑难解答:159-9855-7370(7X24受理投诉、建议、合作、售前咨询),173-0411-9111(售前),155-4267-2990(售前),座机/传真:0411-83767788(售后),微信咨询:543646
企业服务导航

记一次bypass前端验证+后端缺陷

发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370


记一次bypass前端验证+后端缺陷

0x00 故事的开始 有人找到我,搞攻防请求支援,当然这种请求那当然要逝世呀 0x01 开始渗透 发了一堆站,有ip有域名,我搞了一晚上啥都没发现,本来想挖挖越权啥的 早上起来用jsFinder扫描,说不定有什么接口泄露呢!结果还真扫到了一堆,一看就看到了一些不得了的东西 getAllUsers、deleteuser等,尝试访问一个接口发现报错 有可能是未授权!赶紧构造一下参数,分析js后需要两个参数 随便构造了一下出现了所有人的信息但是密码全部md5加密了,尝试解密了一下解不出来,size表示显示的字节 接下来要想办法进入后台进行更多的操作,因为构造参数什么的太麻烦了,他的大部分参数都rsa加密过 尝试修改过登入的返回包也没用 改为0表示成功 发现并没有用 如果换做以前的我,我会放弃,但是!我遇到了龙哥(前端代码审计的神) 0x02 开始反转 找到了js判断是否登入后台的地方 while (1) switch (e.prev = e.next) { case 0: if (T.a.start(), document.title = j(t.m eta.title), i = O bject(P["a"])(), !i) { e.next = 9; sessionStorage.setItem("user", JSON.stringify({ "userRole": "admin" })) break } if ("/login" !== t.path) { e.next = 9; break } o({ path: "/" }), T.a.done(), e.next = 28; break; case 9: if (r = p["a"].getters.name, !r) { e.next = 15; break } s = JSON.parse(sessionStorage.getItem("user")), "admin" == s.userRole && "/bg_userManage" !== t.path ? (O bject(a["Message"])({ message: "只有用户管理的权限", type: "warning", duration: 5e3 }), o({ path: "/bg_userManage" }), T.a.done()) : "audit" == s.userRole && "/bg_logManage" !== t.path ? (O bject(a["Message"])({ message: "只有日志管理的权限", type: "warning", duration: 5e3 }), o({ path: "/bg_logManage" }), T.a.done()) : "user" != s.userRole || "/bg_logManage" !== t.path && "/bg_userManage" !== t.path ? (o(), T.a.done()) : (o({ path: "/404" }), T.a.done()), e.next = 28; break; case 15: return e.prev = 15, e.next = 18, p["a"].dispatch("user/getInfo"); case 18: o(), e.next = 28; break; case 21: return e.prev = 21, e.t0 = e["catch"](15), e.next = 25, p["a"].dispatch("user/resetToken"); case 25: a["Message"].error(e.t0 || "Has Error"), o("/login?redirect=".concat(t.path)), T.a.done(); case 28: e.next = 31; break; case 30: -1 !== z.indexOf(t.path) ? (T.a.done(), o()) : (-1 !== n.path.indexOf("/non_visitor") ? o("/dashboard") : o(n.path), p["a"].commit("user/SET_LOGINWINDOWSTATE"), T.a.done()); case 31: case "end": return e.stop() } 使用f12断点进行Dbug调试 发现是走到了0 然后赋值了30,因为是while (1)所以跳到了30后面就直接结束了 注意到了9,感觉就是后台页面,我们只需要想办法进到9里面就可以了 尝试重新调试,只需要在他赋值30的完事后在重新赋值覆盖掉他的值 然后不就会跳转到9了?确实,成功跳到了9 第一个if没有进,不管他看下面的s.userRole,而s又等于JSON.parse(sessionStorage.getItem("user")) 直接在这个地方赋值s.userRole="admin"发现报错,请求了龙哥 0x03 白热化阶段 sessionStorage.setItem("user",JSON.stringify({"userRole":"admin"})) 他这里先构造一个userRole=admin的json然后在进行写入本地的sessionStorage? 前面搞定了只需要把path路径改为bg_userManage就可以查看了 成功进来了这个判断: 查看后台: 尝试添加一个账号 果然,rsa加密了,如果我不进后台,拿头给他构造 登入就完事了 第一次登入需要修改密码: 尝试直接修改别的用户的密码: 结果真的可以修改,登入后的页面就不展示了,全是水印根本码不过来 0x04 推荐 推荐浏览器插件reres,可以把网站的js下载到本地进行本地加载(实现修改js的目的,省的dbug修改) 可以直接在0的地方修改 就不用每一次dbug了 0x05 结尾 以后渗透要多看看js,接口什么,实现真正的从0到1 文章来源:奇安信攻防社区(yier)原文地址:https://forum.butian.net/share/198排版:潇湘信安 黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担! 如侵权请私聊我们删文 END

记一次bypass前端验证+后端缺陷