当前位置:首页 > CTF > 正文内容

JWT密钥破解

Luz1年前 (2019-12-28)CTF662

工具

c-jwt-cracker-master 


编译 

root@kali:~/桌面/c-jwt-cracker-master/c-jwt-cracker-master# make

使用

root@kali:~/桌面/c-jwt-cracker-master/c-jwt-cracker-master# /root/桌面/c-jwt-cracker-master/c-jwt-cracker-master/jwtcrack  eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaGludCI6IlRoZSBTaWduYXR1cmUncyBNZDUgaXMgWmlwJ3MgUGFzc3dvcmQiLCJpYXQiOjE1MTYyMzkwMjJ9.wvVICsoUEmVkDxWAfBgDR9Xp32x88OB1h08UmTTenxA


Secret is "Zac1"

关于JWT

JWT的组成

我们随便来看一个:

1
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJoZWxsbyIsImlhdCI6MTU2MjUwNDkxOCwiZXhwIjoxNTYyNTA0OTIzLCJhY2NvdW50Ijoia2sifQ.GqWnsUjzpqtE4GJrZ5Zim_nrwnQTGAlidoGqe3354yM

JWT的格式非常简单

JWT的数据分为三个部分: headers , payloadssignature(签名)

三者通过.分割,均采用base64编码

Headers

1
2
3
4
5
6
7
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

解码后为:
{
 "typ": "JWT",
 "alg": "HS256"
}

alg为算法的缩写,typ为类型的缩写,有时候还会有kid,kid表示算法所使用的密钥文件(当服务端需要多个密钥文件时使用)

Payloads

1
2
3
4
5
6
7
8
9
eyJpc3MiOiJoZWxsbyIsImlhdCI6MTU2MjUwNDkxOCwiZXhwIjoxNTYyNTA0OTIzLCJhY2NvdW50Ijoia2sifQ

解码后为:
{
 "iss": "hello",
 "iat": 1562504918,
 "exp": 1562504923,
 "account": "kk"
}

这几个字段的含义如下,其中需要注意的字段是exp,这字段可在一定程度上被用来防止重放攻击

iss(issuer):发布者的url地址

sub(subject):该JWT所面向的用户,用于处理特定应用,不是常用的字段

aud(audience):接受者的url地址

exp(expiration):该jwt销毁的时间;unix时间戳

nbf(not before):该jwt的使用时间不能早于该时间;unix时间戳

iat(issued at):该jwt的发布时间;unix 时间戳

jti(JWT ID):该jwt的唯一ID编号

Signature

1
GqWnsUjzpqtE4GJrZ5Zim_nrwnQTGAlidoGqe3354yM

因为header和payload是明文存储的,所以签名是为了防止数据被修改的,提供了对数据的交易功能
签名常使用RS256(RSA 非对称加密,使用私钥签名)、HS256(HMAC SHA256 对称加密)算法,签名对象为base64encode(headers) + ‘.’ + base64encode(payloads)


分享给朋友:

相关文章

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。