JWT利用

简介: 参考文献:www.cnblogs.com/dliv3/p/7450057.html工具:https://jwt.io/JWT概念:JWT是用于网络间传递声明而执行一种基于JSON 的标准。

参考文献:www.cnblogs.com/dliv3/p/7450057.html
工具:https://jwt.io/

JWT概念:

JWT是用于网络间传递声明而执行一种基于JSON 的标准。JWT 提供了一种简单的方法,在彼此传递数据时,验证是由谁先创建了数据。JWT和cookie,session有点类似。

JWT应用场景

①授权:一旦用户登录,每个后续请求将包括JWT,允许用户访问该令牌允许的路由,服务和资源。它的开销很小,并且能够在不同的域中轻松使用。

②信息交换:JWT可以签名。例如,使用公钥/私钥对可以确定发件人是他们所说的人。此外,由于使用标头和有效负载计算签名,还可以验证内容是否未被篡改。

JWT结构

①Header
通常由两部分组成:①令牌的类型JWT,②正在使用的散列算法如HMACSHA256RSA

{
    "alg":"RS256",   #alg算法的缩写
    "typ":"JWT"       #typ为类型的缩写
}

然后,这个JSONBase64编码,形成JSON Web Token的第一部分。

②Payload
令牌的第二部分是包含声明的有效负载。
payload中也有一些JWT标准定义的字段,用户可选择使用

{
    "iss": "John Wu JWT",   #该JWT的签发者
    "iat": 1441593502,    #在什么时候签发的
    "exp": 1441594722,   #什么时候过期,这里是一个Unix时间戳
    "aud": "www.example.com",  #接收该JWT的一方
    "sub": "jrocket@example.com", #该JWT所面向的用户
    "username": "A"    #私有字段
}

然后将有效载荷Base64进行编码以形成JSON Web Token的第二部分。

③Signature
利用header中指定算法进行签名
例如HS256(HMAC SHA256),签名的构成为:

HMACSHA256(
  base64Encode(header) + "." +
  base64Encode(payload),
  secret)

然后将这部分base64编码形成JSON Web Token第三部分、

完整的JWT:

img_e2093f1a2d1c92572437b8f504a571e4.png

JWT 的使用方式

在身份验证中,当用户使用其凭据成功登录时,客户端收到服务器返回的 JWT,可以储存在 Cookie 里面,也可以储存在localStorage。此后,客户端每次与服务器通信,都要带上这个 JWT。可以把它放在 Cookie里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求的头信息Authorization字段里面。

Authorization: Bearer <token>

攻击JWT

①敏感信息泄露
payload是明文传输的,所以如果payload中存在敏感信息就会出现信息泄露

②修改算法为none
签名算法保证了JWT在传输的过程中不被恶意用户修改,但是header中的alg字段可被修改为none,一些JWT库支持none算法,即没有签名算法,去掉JWT中的signature数据(仅剩header + '.' + payload + '.')然后提交到服务端即可

③修改算法RS256为HS256(非对称密码算法 => 对称密码算法)
算法HS256使用秘密密钥对每条消息进行签名和验证,算法RS256使用私钥对消息进行签名,并使用公钥进行验证。
如果将算法从RS256更改为HS256,后端代码会使用公钥作为秘密密钥,然后使用HS256算法验证签名。由于公钥有时可以获取到,所以可以修改header中算法为HS256,然后使用RSA公钥对数据进行签名,后端代码会使用RSA公钥+HS256算法进行签名验证。

④HS256(对称加密)密钥破解
如果HS256密钥强度较弱,可以直接暴力破解,可使用PyJWT或 John Ripper进行破解测试

例子

参考文献:https://delcoding.github.io/2018/03/jwt-bypass/
找了挺多也没找到一个能玩的靶机,就直接放大佬的wp了。

  • 在cookie里的内容是
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ImZhbHNlIn0.oe4qhTxvJB8nNAsFWJc7_m3UylVZzO3FwhkYuESAyUM
{"alg":"HS256","typ":"JWT"}{"admin":"false"}({�¡O�É�ÉÍ�ÁV%ÎæÝL¥U�ÎÜ\!���H�0
  • admin里面的false变成true就可以拿到flag。但直接变肯定是不行的,Signature部分会验证,还需要知道key是什么
  • 使用了这个工具进行破解
    img_26d572f88a149df647b625c03cdcad7d.png
  • 得到key,再生成cookie


    img_fe9ad79b98d44447b552401adeece1a0.png
目录
相关文章
|
6月前
|
存储 JSON 安全
JWT 还能这样的去理解嘛??
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的。JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。可以看出,。并且, 使用 JWT 认证可以攻击,因为 JWT 一般是存在在中,使用 JWT 进行身份验证的过程中是的。
211 1
|
4月前
|
存储 JSON 算法
JWT
【7月更文挑战第5天】
48 0
|
5月前
|
存储 JSON 算法
12.Jwt
12.Jwt
30 0
|
前端开发
什么是JWT?深入理解JWT从原理到应用(下)
什么是JWT?深入理解JWT从原理到应用(下)
108 0
|
6月前
|
JSON 算法 数据库
JWT 是什么
JWT 是什么
|
6月前
|
存储 JSON 算法
什么是JWT?
什么是JWT?
68 0
|
6月前
|
存储 JSON 算法
快速了解什么是jwt及如何使用jwt
快速了解什么是jwt及如何使用jwt
181 0
|
11月前
|
存储 JSON 安全
了解什么是JWT
了解什么是JWT
68 0
|
11月前
|
JSON 数据格式
jwt->jwt简介,jwt工具类,jwt集进成spa项目
jwt->jwt简介,jwt工具类,jwt集进成spa项目
82 0
|
JSON 算法 前端开发
什么是JWT?深入理解JWT从原理到应用(上)
什么是JWT?深入理解JWT从原理到应用(上)
1741 0