Skip to content

Latest commit

 

History

History
78 lines (62 loc) · 3.69 KB

File metadata and controls

78 lines (62 loc) · 3.69 KB

JWT 安全


免责声明

本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.


关于 JWT 认证的基本知识点可见笔记 认证 & 授权

相关文章

Tips

搜索 JWT 的正则,来自 以下正则来自 以下内容来自 [ ticarpi/jwt_tool ]

[= ]ey[A-Za-z0-9_-]*\.[A-Za-z0-9._-]*           稳定的 JWT 版本
[= ]ey[A-Za-z0-9_\/+-]*\.[A-Za-z0-9._\/+-]*     所有 JWT 版本(可能误报)

python快速生成 jwt

import jwt
jwt.encode({'字段1':'test','字段2':'123456'},algorithm='none',key='')

相关工具


攻击思路

爆破 jwt 密钥

通过工具爆破目标 jwt 密钥,尝试伪造具备有效签名的新 JWT 值

加密算法置空

  1. 捕获 JWT.
  2. 修改 algorithm 为 None.
  3. 在正⽂中⽤任何你想要的内容改变原本的内容,如: email: attacker@gmail.com
  4. 使⽤修改后的令牌发送请求并检查结果。

篡改加密算法

  1. 捕获 JWT token.
  2. 如果算法是 RS256,就改成 HS256,然后⽤公钥签名(你可以通过访问 jwks Uri (https://YOUR_DOMAIN/.well-known/jwks.json) 来获得,⼤多数情况下是该网站 https 证书的公钥)。
  3. 使⽤修改后的令牌发送请求并检查响应。

检查服务器端会话终⽌是否正确 (OTG-SESS-006)

  1. 检查应用程序是否使用 JWT 令牌进行认证。
  2. 如果是,登录到应用程序并捕获令牌。(⼤多数网络应⽤都会将令牌存储在浏览器的本地存储中)
  3. 现在注销应用程序。
  4. 用之前捕获的令牌向权限接口发出请求。
  5. 有时,请求会成功,因为 Web 应用程序只是从浏览器中删除令牌,而不会在后端将令牌列⼊黑名单。