标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2025-3502] 作者: ShYLie 发表于: [2025-02-11]
本文共 [9] 位读者顶过
“cookie中缺少了JSESSIONID,这时候我拿缺少JSESSIONID的包去修改userid居然发现成功了。Cookie变成了万能cookie,可以用于任意用户的信息修改。删除了JSESSIONID,创造了一个万能用户的标识。”
01
起因
[出自:jiwo.org] 最近补习班机构开设了一套机考系统,需要集赞才能够领取使用。
我硬是在小号一个一个加了18个人才凑够了数量成功领取(无奈大号添加的人实在太多) 闲来无事的我便是测试一下是不是有漏洞呢? 想来它肯定是搭建在了公网上了,才能做到让学生在线答题排名。 (因为之前想过对另一个系统开展测试,但遗憾的是系统是搭建在内网上的,学生只能在线下机房才能参与考试,无奈只能放弃。
02 展开思路
拿到站点之后 拿到目录探测工具里扫一下
可以看到有不少东西,在后台登录口进行了弱口令、js未授权均无果。 不过没关系,这次报告的重点不在这里哈哈 还是回到重点,学生端的使用入口 |首先第一个小瑕疵 ![]()
这里的登录验证码并不会随着登录而刷新,可以重复使用,一般的OCR就可以对其识别,给了攻击者暴力破解密码以及用户枚举的机会。 03 正式开始漏洞挖掘之旅
登陆账号 对页面的功能点展开思考
1.用户的个人信息界面 站点会和服务器进行数据请求和交换----看看有没有控制用户参数,可能出现越权漏洞 可以看到有头像的存在,说明可以进行文件上传---可以测试xss和getshell 2、3.我的笔迹与习题收藏 站点会和服务器交互显示用户储存的题目等信息-----可以测试sql注入、注入写马 4.套卷练习 本系统需要vip兑换码成为会员身份才可以进行套卷练习--可测SQL注入、未授权vip身份 5.退出点 结合头像上传处可以考虑退出链接替换头像url造成csrf漏洞,效果就是看到头像的用户就会自动退出账号,再次发散思想,可以尝试注销账号、修改密码等csrf如果造成看到头像的用户就自动注销自己的账号绝对就是高危漏洞。
04 漏洞—xss
这个漏洞也是有点奇怪
报错信息是从用户端发包给服务端然后再显示的,而不是输入了错误的兑换码然后服务端返回报错信息,这就导致用户输入的字段会回显在页面上(xss可测) 报错信息 %E6%BF%80%E6%B4%BB%E6%8F%90%E7%A4%BA&msg=%E5%8D%A1%E5%8F%B7%E6%88%96%E5%AF%86%E7%A0%81%E9%94%99%E8%AF%AF%EF%BC%8C%E8%AF%B7%E7%A1%AE%E8%AE%A4%EF%BC%8C%E8%B0%A2%E8%B0%A2%EF%BC%81 解码后 激活提示&msg=卡号或密码错误,请确认,谢谢!
我们尝试替换为<script>alert(安心落意)</script>
成功弹窗,xss漏洞一枚
05 进入下一界面,展开思考
进入下一界面,展开思考 1.最重要的漏洞,想要达到没有会员兑换码也可以享受会员身份的效果 尝试:翻看js代码进行审计,看看兑换成功or失败是否存在返回包的明显不同,尝试进行修改看看能不能绕过判定逻辑。 2.用户填写兑换码---数据库校验是否存在--返回结果 测试SQL注入
在源码中输入passwordError搜索,可以看到逻辑
var msg = ""; var flag = false; if (result.entity == 'passwordError') { msg = "卡号或密码错误,请确认,谢谢!"; } else if (result.entity == 'userError') { msg = "该会员卡已被使用!"; } else if (result.entity == 'usedError') { msg = "该会员卡已被使用!"; } else if (result.entity == 'overdueError') { msg = "该会员卡已过期!"; } else if (result.entity == 'destroyError') { msg = "该卡已作废,不能进行激活,请确认!谢谢"; } else if (result.entity == 'typeError') { msg = "卡号或密码错误,请确认,谢谢!"; } else if (result.entity == 'succeed') { dialog('激活提示', "您的会员卡已兑换成功!", 0); flag = true;setTimeout(function () { window.location.reload();}, 2000); } if (!flag) { $('.dialog-shadow').remove(); dialog('激活提示', msg, 1); } } else { dialog('激活提示', result.message, 1); setTimeout(function () { window.location.reload(); }, 2000);
}
06 未授权漏洞,享受vip身份 再次输入错误兑换码,并且拦截,修改数据包
假如黑客遍历userid,把手机号改成13888888976这样的号码,可以说是很难自己找回了
JSESSIONID 是Java Servlet技术中用于维持Web应用用户会话的一个标识符。当用户访问基于Java Servlet容器(如Apache Tomcat、Jetty等)构建的Web应用程序时,服务器会为每个新的、未携带会话标识的HTTP请求分配一个新的会话对象,并生成一个唯一的JSESSIONID作为该会话的标识符。 总之,JSESSIONID是Java Web应用程序中用于跟踪用户会话的关键标识,确保了在无状态的HTTP协议基础上实现有状态的用户交互过程。 在此系统中删除了JSESSIONID,创造了一个万能用户的标识。 |