作者:
Hacker_LawKing
前言
3.15记:
一次常规的漏洞挖掘,测试平台非专业SRC或公益SRC,单纯是我打无畏契约看到的一个up,看到他的鉴挂视频,然后抽空看了一眼平台,正好最近比赛失利,DesCTF和SUCTF的web题都解不出来,要不是队里有个pwn大佬,估计就是零鸡蛋了,于是就想着找个平台测测,平平心态,顺便记录一下,同时作为漏洞报告发送给网站管理员
3.23记:
有一段时间没有好好学习了,最近打瓦冲分上了个黄金,嘿嘿,劳逸结合嘛,刚好比赛失利换换心情
然后刚好刷到一个瓦的鉴挂网站,然后网站是一个b站和抖音皆20w粉丝的博主和别人一起开发的,然后我刚好来兴趣了,就测试了一下,结果直接发现jwt算法降级导致的越权漏洞,可以遍历5k多人的账号信息,包括手机号邮箱等,提交给相关网站管理人员后,管理员也是直接打赏了166元,没想到我的第一笔收益居然不是企业src,而是一个游戏网站,后续还发现一个验证码可绕过的漏洞,可能导致任意用户的密码被爆破
第一个漏洞,就是这篇漏洞报告,可自行查看;第二个漏洞没有漏洞报告,所以我口头表述一下:前端申请验证码(无参数)->后端返回一个验证码key->前端拿着key+用户输入的验证码和账号密码去登录->登录接口校验key对应的验证码是否和用户输入的验证码一致,一致就继续判断用户名和密码…
看了这个逻辑你肯定就能看出来问题,既然是校验key对应的验证码,那么我让key值为空或零,是不是验证码也可以不用输入了,事实如此,直接绕过验证码的校验,登录成功,所以攻击者可以通过构造key值和验证码为空的请求包去爆破其他用户的密码,当然网站开启了waf,速度无法太快,但也是一个漏洞了,联系了管理员,管理员表示是本地内测的时候忘记删除了,然后打赏了20元,还是非常不错的
以上两个漏洞,均已修复,因为我提交了有一段时间了
漏洞类型:
- JWT 安全配置缺陷
- 水平越权(IDOR)
- 认证绕过漏洞
风险等级:
高危 / 严重:
该漏洞允许普通用户绕过权限控制,直接查看任意用户的隐私信息(如手机号、姓名、头像等)
同时还影响所有依赖该 JWT 的接口
漏洞发现:
正常信息收集,发现没有其他子域名,然后是扫描目录和接口探测,没有发现什么有用的,直接尝试注册账号,发现使用手机号+短信验证码的形式注册,验证码是6位数,不太好爆破
注册完成后,接口就多了,后台也有非常多的功能点可以测试,简单找了一下

可以查看个人中心,点击查看

这里你们看到的是188xxxxxxxx,但是实际上这里显示的是正常的手机号,不过我F12前端修改了,为了方便截图,懒得后期打码
这就是一个问题,直接显示了用户的完整手机号,抓包查看数据包

可以看到这个数据包中有一个Authorization,看这个格式,应该都能看出来是JWT,然后响应包里面包含了id,用户名和手机号,且未对手机号进行脱敏处理,这是一个不好的习惯,正常的情况是,只显示188xxxx1234,这样即使存在漏洞也不会导致数据的直接泄露
既然知道这个地方可以直接泄露用户的数据,那么只需要想办法水平越权即可

可以看到这是一个GET请求,没有直接的传递用户id的参数,那么只有两种情况了,第一种就是直接通过cookie来判断用户id,第二个就是通过jwt来判断,我直接尝试的后者,先用在线的网站解码一下

解码后没有看到加密的key,只有这些数据,的确存在
userid,现在要做的就是修改,然后使签名正确即可测试水平越权,不过尝试了一番无果,但是爆破弱口令我又懒得跑,网上冲浪了一下可能的漏洞,发现一个思路,算法降级,正常来讲,payload和header通过header里面的算法来进行加密,然后成为签名,服务端校验签名来判断数据包是否被篡改,而这个加密的算法不光是HS256,还可以是其他的

直接在这个网站你可以查看到其他的算法,有一个none,意思就是无算法加密,都没加密了,自然就没有签名的数据,如果服务器或后端没有对这个算法进行限制,那么使用这个算法构造的jwt就是合法的,合法就会正常返回结果,这就是JWT算法降级导致的鉴权绕过
那么思路就很清晰了,构造userid为小号的id,同时算法为none的jwt数据,然后发送请求
这里使用的是我另一个手机号注册的账号,userid为5083,可以看到userid是非常有顺序的,所以只需要从0-5083都遍历一遍就能获取到这5k个用户的数据,这也是一个不好的习惯,最好采用随机的字符串+数字

接下来复制jwt数据,提交请求

可以看到我们通过伪造的jwt数据,成功获取到我小号的数据,id为5083,手机号同样可以看到,不过这里进行了处理
当然并不是说只有这一个接口存在该漏洞,这个漏洞是jwt鉴权的绕过,所以其他接口可能也存在,特别是重置密码等接口,很有可能导致任意用户密码重置(账号被盗)等问题
测试接口:
GET /prod-api/api/v1/users/profile HTTP/2
Host: fsbang.top
Cookie: xxxxxxxxxxxxx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5
Accept-Encoding: gzip, deflate, br
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJzdWIiOiJsYXdraW5nIiwiZGVwdElkIjoxLCJkYXRhU2NvcGUiOjQsInRva2VuVHlwZSI6ZmFsc2UsImV4cCI6MTc3MzYwMDA5NCwidXNlcklkIjo1MDgzLCJpYXQiOjE3NzM1OTI4OTQsImF1dGhvcml0aWVzIjpbIlJPTEVfQ1VTVE9NRVIiXSwianRpIjoiZmUzZjUyYzExNTA2NGI2OGExZjY4NWViNTI1MzI2MDIifQ.
Referer: https://fsbang.top/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
请注意,这个漏洞可能还会影响到其他接口,请一并修复
其他可能存在类似漏洞的接口包括但不限于:素材上传,密码重置,提交反馈,邮箱绑定,手机号变更等
漏洞复现步骤:
- 注册账号并登录(非管理员用户),获取合法 JWT token A
- 将原 token 中的
alg字段由"HS256"修改为"none";- 修改 payload 中的
userId为目标用户 ID;- 使用构建的新 token 发送请求
漏洞危害:
攻击者通过简单的 JWT 转换即可访问任意用户隐私数据,甚至可以通过脚本获取所有的用户的敏感信息,如果其他接口也依赖jwt判断,可能导致任意用户的密码被重置,账号被接管,导致网站业务无法正常运行
修复建议:
禁用
alg: none方式签名,在 JWT 解析时,强制校验alg为指定算法(如 HS256),拒绝任何非法/空值;对所有响应给普通用户的敏感信息进行脱敏处理
JWT的
secret key使用非弱口令,避免被直接爆破出来










