ctfshow jwt模块

ctfshow jwt模块
达达web345
未对签名进行验证
要伪造admin用户访问 admin路由
bp抓包
可以看到这个jwt只要两部分
没有signature(签名)部分 很明显未对签名进行验证
直接把payload部分 的用户 该为admin
header部分 的加密算法 None改成任何一个加密算法都可以
直接在bp里就可以修改
改完之后应用变更send 到/admin/路由 即可
web346
未对加密算法进行强验证
攻击手法跟上关一样 只不过这里要把后面的签名部分去掉 把header中的alg参数的值改为none payload中的sub改为admin
伪造成功发包就可以了
web347
弱密钥
jwt_tool爆破一下密钥
也可以用bp的JSON Editor插件 爆破
可以爆破出来secret是123456
然后用密钥去伪造jwt
伪造的话可以用JWT Web Tokens插件 JWT Editor应该也可以直接用 JWT Web Tokens插件感觉也更方便一点
该一下sub 加一下密钥 去访问/admin/路由即可
web348
这个也是爆破密钥 但不是弱密钥了
需要用到jwt-cracker工具进行爆破
1 | ./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTc1MzM0NjgxMCwiZXhwIjoxNzUzMzU0MDEwLCJuYmYiOjE3NTMzNDY4MTAsInN1YiI6InVzZXIiLCJqdGkiOiI2MmRhM2Y1M2IwZGFiNzk2OTM2MTZlMmQyNzQ1NzhhYSJ9.iKSovfvhqggRhdGepXT5V28dSoi0kZWLePB9_5oxSG0 |
拿到secret了剩下的就跟上一关一样了
web349
公私钥泄密
js文件
1 | /* GET home page. */ |
同一路由,get访问设置cookie,post访问检验cookie,user=admin得到flag
https://www.bejson.com/jwt/去解密jwt因为采用的加密算法RS256为非对称加密,需要public key和private key,利用私钥生成jwt,利用公钥解密jwt
扫描可以发现private.key
public.key跟private.key在同一级目录下 访问/public.key 和 /private.key 拿到公私钥 伪造admin用户
改为POST请求去访问
web350
公私钥泄密之【公钥】泄密。
可以根据公钥,修改算法从 非对称算法(比如RS256) 到 对称密钥算法(HS256)
双方都使用公钥验签,顺利篡改数据
当公钥可以拿到时,如果使用对称密码,则对面使用相同的公钥进行解密
实现验签通过
访问public.key拿到公钥
js脚本
1 | const jwt = require('jsonwebtoken'); |
用伪造好的jwt去post请