freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

一次Jwt伪造漏洞实战案例分析
chobits02 2024-12-24 13:40:55 136071
所属地 江苏省

实战

某次漏洞挖掘时遇到了任意用户登录漏洞,这次的漏洞案例是由于jwt存在弱密钥,攻击者可以伪造jwt,从而获取非授权访问权限。此外站点还存在弱口令,可以通过弱口令登录druid后台,查看敏感信息。

首先通过微信搜索小程序,找到目标。

1735017636_676a44a4b44971c71ca04.png!small?1735017635584

点击进入小程序,点击我的-微信登录

观察数据包,可以看到服务器生成了一个jwt值

1735017659_676a44bbc248d0113c216.png!small?1735017658989

这边就直接尝试爆破该Jwt值

1735017686_676a44d6b17d8b6011bab.png!small?1735017685492

爆破发现其使用了JJWT,且原始密钥为abcdefghijklmnopqrstuvwxyz解密该jwt,发现其中有个user_id字段1735017703_676a44e757f85def63518.png!small?1735017702436用python脚本遍历user_id的值,范围为1-4103根据不同的user_id,用密钥再生成不同的获取jwt值然后在/system/api/getUserInfo接口上获取jwt用户信息。

key ="abcdefghijklmnopqrstuvwxyz" 
secret = base64.b64decode(key[:len(key) - (len(key) % 4)])  # Base64 解码密钥

此处使用的Python生成脚本如下:1735017744_676a4510e8d44014dca2b.png!small?1735017743858注意,服务器是通过判断user_key来判断jwt是否在有效期,如果爆破的时候服务器返回jwt过期,请重新进入小程序刷新一个jwt在遍历user_id。


之后成功遍历出所有用户的信息

1735017762_676a452265788a915f4c2.png!small?1735017761226在用户中发现了测试账号1735017775_676a452f0923deb1fca20.png!small?1735017773888尝试登录这个账户,先清空小程序缓存,重新进入小程序,点击我的,进行抓包抓包1735017793_676a45413a9f0113038cf.png!small?1735017792171修改返回包的jwt为测试账户的jwt1735017806_676a454ec2ff266ce34d4.png!small?1735017805522

包放出去,可以看到成功登录该测试账号,存在任意用户登录漏洞

1735017821_676a455d1f069a70c9a70.png!small?1735017820114

然后是druid弱口令的挖掘

目录爆破该路径,注意请求头要带上jwt,否则服务器会响应401,爆破出了/sysyem路径,如下:

1735017837_676a456d7663622bdec9f.png!small?1735017837436

https://xxxx/system/

接着就发现了druid的后台

https://xxxx/system/druid/login.html

同样,访问的时候请求头也要带上jwt

1735017988_676a460455d4900f50dc7.png!small?1735017987057

使用弱口令admin/123456登录

1735018006_676a46167172fb42e3e46.png!small?1735018005190


后面还扫出了spring一些端点的信息泄漏,但是并没有发现有价值的信息,此外还发现了swagger接口文档,由于站点敏感,没有继续对接口测试

之后又发现该域名8081端口还开了个系统,一眼看上去是若依系统

1735018020_676a46248c7d5fc3b3693.png!small?1735018019543

从浏览器的URL路径提取插件findsomething中找到了一些接口

拿小程序搞到的jwt,放到如下接口爆破,可以看到这个系统用户的信息,包括账号和密文的密码

GET /prod-api/system/user/getInfo HTTP/1.1
Host: xxx:8081
source-client: miniapp
tenant-id: 1001
Authorization: {{file:line(E:\Yakit\Yakit\yakit-projects\temp\tmp297600343.txt)}}

1735018043_676a463b1ddf7905ae297.png!small?1735018041973

可以证明这些jwt对该系统有效,但是没有具体的密码登录,现在只能调用该系统里接口获取数据,非常不方便;于是我找到了如下接口,里面显示了该系统的初始化密码为Eedssrcpt2024!

注:数据包里jwt随便填一个有效的就行

GET /prod-api/system/config/2 HTTP/1.1
Host: xxn:8081
tenant-id: 1001
Authorization: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjozNTU4LCJ1c2VyX2tleSI6IjFiMDBkNTg3LTUyOGQtNGEwMS05NDY0LTQ5YzJkY2YyY2ViZiIsImRlcHRfaWQiOm51bGwsInRlbmFudC1pZCI6MTAwMSwidXNlcm5hbWUiOiJcdTVmYWVcdTRmZTFcdTc1MjhcdTYyMzdfODY1MCJ9.89FqNollbb7u2blR3PDDnHdbs5XStPjR9l5iQXwXlsaXBU7n7YKDh8ZZQMXWbcoUlRnG1m7nIgnLoZ_ajfxH-A

1735018068_676a465430cc7a55f3faa.png!small?1735018067063

于是随便找了个用户名尝试登录

使用初始密码Eedssrcpt2024!成功进入后台

1735018091_676a466ba5735df826c6f.png!small?1735018090963

到此渗透测试结束

后记

实战中挖掘Jwt弱密钥是个新思路,如果无法直接利用,但是能证明Jwt存在弱密钥也能提交对应的src获得漏洞赏金。

# 漏洞 # 渗透测试 # web安全 # 漏洞分析 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 chobits02 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
利器
漏洞挖掘
chobits02 LV.4
网络安全的尽头是? C4安全团队 | 公众号:C4安全团队
  • 21 文章数
  • 75 关注者
用友U8 Cloud移动报表mobilereport接口SQL注入漏洞分析
2025-03-26
Java代码审计 | 华天动力OA漏洞分析两则
2025-03-07
Burp插件编写简易教程
2024-12-09
文章目录