jwt

jwt

跨清溪半里桥

jwt

与普通Tokn一样都是访问资源的令牌,都可以记录用户信息,都是只有验证
成功后才可以获取信息。
不同的是普通Token.服务端验证token信息要进行数据的查询操作;JWT验证token
信息就不用,在服务端使用密钥校验就可以,不用数据库的查询。

用途:

  • 身份认证:用户登录后,服务器生成JWT,后续请求携带此token来证明身份。

  • 信息交换:在不同系统间安全地传递信息。

    jwt4.png

结构: JWT由三部分组成,用点(.)分隔:

  • Header(头部):包含token类型和使用的加密算法。
  • Payload(载荷):包含声明(claims),如用户ID、过期时间等。
  • Signature(签名):用于验证token未被篡改。

安全性:

  • JWT本身不加密数据,但可以被签名。
  • 敏感信息不应放在payload中,除非使用加密。

示例流程:

  • 用户登录 -> 服务器验证凭证 -> 生成JWT -> 返回给客户端
  • 客户端存储JWT(通常在localStorage或cookie中)
  • 后续请求携带JWT -> 服务器验证JWT -> 允许访问资源

jwt1

1
2
3
4
5
6
7
8
9
10
import jwt          #导入jwt       可以pip install pyjwt

payload = {
"username": "admin"
}

secretcode = 'guizhou'

token = jwt.encode(payload, secretcode, algorithm='HS256')
print(token)

jwt

网站

1
jwt.io

jwt3.png

jwt利用方式
1
https://xz.aliyun.com/t/6776?time__1311=n4%2BxnD0DRDyDgDIoEDlhAeK2EmKG%3DDc0gYD&alichlgref=https%3A%2F%2Fwww.google.com%2F
有缺陷的身份验证 修改普通用户为管理员

jwta

弱密钥破解
1
2
3
4
5
hashcat -a 0 -m 16500 jwt 字典          cpu破解

hashcat --hash-type 16500 显卡破解

https://github.com/wallarm/jwt-secrets/blob/master/jwt.secrets.list jwt字典
参数头注入
1
2
3
4
5
6
7
8
9
10
根据 JWS 规范,只有 alg 标头参数是强制的。但实际上,JWT 标头(也称为 JOSE 标头)通常包含其他几个参数。攻击者特别感兴趣的是以下内容。

jwk (JSON Web Key) - Provides an embedded JSON object representing the key.
jwk (JSON Web 密钥)- 提供表示密钥的嵌入式 JSON 对象。

jku (JSON Web Key Set URL) - Provides a URL from which servers can fetch a set of keys containing the correct key.
jku (JSON Web 密钥集 URL)- 提供一个 URL,服务器可以从中获取包含正确密钥的一组密钥。

kid (Key ID) - Provides an ID that servers can use to identify the correct key in cases where there are multiple keys to choose from. Depending on the format of the key, this may have a matching kid parameter.
kid (密钥 ID)- 提供一个 ID,服务器可以使用该 ID 在有多个密钥可供选择的情况下识别正确的密钥。根据密钥的格式,它可能具有匹配的 kid 参数。

待续

利用工具

1
https://github.com/ticarpi/jwt_tool
On this page
jwt