JWT 安全及案例实战

这篇具有很好参考价值的文章主要介绍了JWT 安全及案例实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、JWT (json web token)安全

1. Cookie(放在浏览器)

​ cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的

2. Session(放在服务器)

​ session从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方带定有某种特征(长相等)表明他就是张三。
session也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用cookie的方式。
服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

3. Token

​ 在Web领域基于Token的身份验证随处可见.在大多数使用Web API的互联网公司中,tokens是多用户下处理认证的最佳方式。
​ 以下几点特性会让你在程序中使用基于Token的身份验证

  1. 无状态、可扩展
  2. 支持移动设备
  3. 跨程序调用
  4. 安全

4. JWT (json web token)

JWT 安全及案例实战,安全,github,网络安全,web安全

JWT(JSON Web Token)由三部分组成:头部(Header)、载荷(Payload)、签名(Signature):


头部(Header):

	头部通常由两部分组成,算法类型和令牌类型。
	算法类型:指定用于生成签名的算法,例如HMAC、RSA或者ECDSA。
	令牌类型:指定令牌的类型,常见的是JWT
	头部使用Base64Url编码表示,并作为整个JwT的第一部分。头部的一个示例:
{
"alg":"Hs256",none #默认alg是未加密的,加上none后不加密
"typ":"JwT"
}


载荷(Payload):

	载荷存储了有关用户或实体的声明和其他有关信息。
	声明:如用户ID、角色、权限等信息
	注册声明:包含一些标准的声明(比如发行人、过期时何等)和一些自定义的声明。
	载荷也使用Base64Url编码表示,并作为整个JWT的第二部分。载荷的一个示例:
{
 "sub": "1234567890",
 "name": "John Doe",
 "iat": 1516239022
}


签名(Signature):

	签名是对头部和载荷进行签名的结果,用于验证 JWT 的完整性和真实性。
	签名生成方式:将头部和载荷进行 Base64Url 编码后拼接在一起,然后使用指定的加密算法(如 HMAC、RSA)进行签名,将生成的签名添加到 JWT 中。

4.1 头部

4.1.1 alg

是说明这个 JWT 的签名使用的算法的参数,常见值用 HS256(默认),HS512 等,也可以为

None。HS256 表示 HMAC SHA256。

4.1.2 typ

说明这个 token 的类型为 JWT

4.2 payload

payload载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分

  • 标准中注册的声明
  • 公共的声明
  • 私有的声明

标准中注册的声明(建议但不强制使用):

  • iss:jwt签发者
  • sub:jwt所面向的用户
  • aud:接收jwt的一方
  • exp:jwt的过期时间,这个过期时间必须要大于签发时间
  • nbf:定义在什么时间之前,该jwt都是不可用的.
  • iat:jwt的签发时间
  • jti:jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

4.3 签名

服务器有一个不会发送给客户端的密码(secret),用头部中指定的算法对头部和声明的内容用此密码进行加密,生成的字符串就是 JWT 的签名

4.4 通信流程

JWT 安全及案例实战,安全,github,网络安全,web安全

第一步:使用用户名和密码进行登录

第二步:服务器认证成功后创建一个加密的 JWT的cookie

第三步:服务器返一个 JWT给浏览器

第四步:浏览器发送 JWT给服务器

第五步:服务器检查 JWT,从JWT中获取用户信息

第六步:服务器向客户端发送响应

5. 防御措施

  1. 使用强大的密钥和算法:选择足够强大的加密算法和密钥长度,如HMAC-SHA256或RSA-2048等。使用长而随机的密钥可以增加JWT的安全性,并提高防止暴力破解和字典攻击的能力。
  2. 令牌有效期限制:设置合理的令牌过期时间。较短的过期时间可以减少令牌被滥用的风险。定期刷新和更新过期的令牌可以确保令牌的时效性和安全性。
  3. 验证令牌签名和完整性:在接收到JWT后,验证令牌的签名和完整性以确保其真实性。检查签名时使用的密钥和算法必须与发放JWT的一方保持一致。
  4. 避免在JWT中存储敏感信息:尽量避免在JWT的载荷中存储敏感信息,如密码、社会安全号码等。如果必须存储敏感信息,应使用加密技术对其进行加密。
  5. 加密敏感信息:如果需要在JWT中传输敏感信息,应使用加密算法对其进行加密。在加密前,确保选择合适的加密算法,并采取适当的密钥管理措施,确保加密信息的安全性。
  6. HTTPS传输:始终使用HTTPS来传输JWT,以保护令牌在传输过程中的安全性。HTTPS提供了端到端的加密传输,防止令牌被窃听或篡改。
  7. 令牌刷新和撤销机制:实施令牌刷新和撤销机制,以应对丢失、泄露或被盗用的令牌。可以使用黑名单、短有效期令牌或存储令牌的数据库来实现这些机制。
  8. 令牌审计和监控:建立令牌审计和监控系统,对令牌的使用进行监测和追踪。这有助于及时发现任何异常活动或未经授权的令牌使用。
  9. 密钥安全管理:安全地管理和存储用于签名和验证JWT的密钥。密钥应该存放在受保护的环境中,访问权限应限制在必要的人员范围内。

二、漏洞实例(webgoat)

启动靶场

java -jar webgoat-server-8.1.0.jar --server.port=8888 --server.address=本机ip

注意大小写

访问

127.0.0.1:8888/WebGoat

JWT 安全及案例实战,安全,github,网络安全,web安全

1. 第四关

页面给出的要求是成为管理员,并重置投票结果

JWT 安全及案例实战,安全,github,网络安全,web安全

点击小人像选择一个用户,再点击删除键。然后使用bp抓包

JWT 安全及案例实战,安全,github,网络安全,web安全

JWT 安全及案例实战,安全,github,网络安全,web安全

获得 JWT:

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE2OTU0NzI3OTYsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiVG9tIn0.P0RGe6YEKWHBk22JJ3ug9kbWxcb97Ca8mLVV_EQza5AjvkVS6RsKRwitBqnx--WLRBdHbmwN_zPySBDK_MIKjw

使用jwt.io解密 JWT

JWT 安全及案例实战,安全,github,网络安全,web安全

使用JSON校验格式化工具将修改过的 JWT 数据(payload中admin 修改为 true,header中加密方式修改为 none)进行base64加密

修改payload内容并进行加密

JWT 安全及案例实战,安全,github,网络安全,web安全

修改过内容的payload经过base64加密的结果要在两点之间,两点不可删除

JWT 安全及案例实战,安全,github,网络安全,web安全

注意:不要删除或修改原有格式

修改header内容并进行加密

JWT 安全及案例实战,安全,github,网络安全,web安全

修改过内容的header经过base64加密的结果要在点之前,点不可删除

JWT 安全及案例实战,安全,github,网络安全,web安全

因为头部的加密方式改为了none,那么签名就没有意义了。舍弃签名将修改过的JWT复制到bp的数据包中。注意payload和签名之间的点不能丢弃

ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNjk1NDcyNzk2LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0.

JWT 安全及案例实战,安全,github,网络安全,web安全

JWT 安全及案例实战,安全,github,网络安全,web安全

2. 第五关

题目要求在给出的令牌中找到密钥,改变用户为WebGoat并使用找到的密钥加密签名

JWT 安全及案例实战,安全,github,网络安全,web安全

在页面中点击F12,选中给出的令牌

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY5NDYxMzY3MSwiZXhwIjoxNjk0NjEzNzMxLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.TMb4Of0VRzFWfyVtmpxCVpLIrrmKwnAPM-7juWw9_qA

将令牌复制到jwt.io中解密

JWT 安全及案例实战,安全,github,网络安全,web安全

在Unix时间戳中修改 exp 有效时间

JWT 安全及案例实战,安全,github,网络安全,web安全

JWT 安全及案例实战,安全,github,网络安全,web安全

1694697596

JWT 安全及案例实战,安全,github,网络安全,web安全

JWT 安全及案例实战,安全,github,网络安全,web安全

爆破密钥

将题目给出的令牌复制到桌面下的 jwt.txt 中,并子啊桌面下创建密码字典 1.txt 内容包含(victory)

JWT 安全及案例实战,安全,github,网络安全,web安全

使用命令爆破密钥

hashcat -m 16500 jwt.txt -a 3 -w 3 1.txt
	#-m 16500 :这里的 16500 对应的就是 jwt 的 token 爆破;
	#-a 3 :代表蛮力破解
	#-w 3 :可以理解为高速破解,就是会让桌面进程无响应的那种高速
	#jwt.txt :是我把题目要求破解的 token 保存到的文件
	#pass.txt :密码字典

获得密钥:victory

JWT 安全及案例实战,安全,github,网络安全,web安全

使用爆破出的密钥加密签名

JWT 安全及案例实战,安全,github,网络安全,web安全

将得出的结果提交

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY5NDYwODEwNywiZXhwIjoxNjk0Njk3NTk2LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IldlYkdvYXQiLCJFbWFpbCI6InRvbUB3ZWJnb2F0Lm9yZyIsIlJvbGUiOlsiTWFuYWdlciIsIlByb2plY3QgQWRtaW5pc3RyYXRvciJdfQ.hsPDzQ945fDfLUcMzDUQViFTfohikcXicLFHovNdGNk

JWT 安全及案例实战,安全,github,网络安全,web安全

3. 第七关

题目要求让tom付款

JWT 安全及案例实战,安全,github,网络安全,web安全

点击付款使用bp抓包

JWT 安全及案例实战,安全,github,网络安全,web安全

点击here获取日志,从日志中获取jwt

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1MjYxMzE0MTEsImV4cCI6MTUyNjIxNzgxMSwiYWRtaW4iOiJmYWxzZSIsInVzZXIiOiJUb20ifQ.DCoaq9zQkyDH25EcVWKcdbyVfUL4c9D4jRvsqOqvi9iAd4QuqmKcchfbU8FNzeBNF9tLeFXHZLU4yRkq-bjm7Q

使用jwt.io解码

JWT 安全及案例实战,安全,github,网络安全,web安全

修改exp和加密方法

修改头中的加密方法

JWT 安全及案例实战,安全,github,网络安全,web安全

JWT 安全及案例实战,安全,github,网络安全,web安全

修改exp

JWT 安全及案例实战,安全,github,网络安全,web安全

JWT 安全及案例实战,安全,github,网络安全,web安全

因为加密方式为none那么签名就可以舍弃了

ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNTI2MTMxNDExLAogICJleHAiOiAxNjk0Njk3NTk2LAogICJhZG1pbiI6ICJmYWxzZSIsCiAgInVzZXIiOiAiVG9tIgp9.

因为抓到的数据包中没有jwt的位置那么就可以在数据包中找一个位置存放jwt,此数据包可放置在Authorization中

JWT 安全及案例实战,安全,github,网络安全,web安全

JWT 安全及案例实战,安全,github,网络安全,web安全

添加:

反序列化漏洞是因为链式调用

越权漏洞是因为凭证(Cookie,Session,Token,JWT)

现如今常见的都是越权和逻辑漏洞,学习JWT就是为了攻击凭证(越权)

web漏洞只有一个入口:http

authz:bp中验证越权的插件,页面有误cookie大小和响应都相同的话就是说cookie无用,存在越权文章来源地址https://www.toymoban.com/news/detail-733065.html

到了这里,关于JWT 安全及案例实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 某医院网络安全分析案例

    背景 我们已将NetInside流量分析系统部署到某市医院的机房内,使用流量分析系统提供实时和历史原始流量。本次分析重点针对网络流量安全进行分析,以供安全取证、网络质量监测以及深层网络分析。 分析时间 报告分析时间范围为:2023-04-12 16:00—2023-04-18 16:00,时长共计7天

    2023年04月23日
    浏览(40)
  • 【信息安全案例】——网络信息面临的安全威胁(学习笔记)

    📖 前言:2010年,震网病毒(Stuxnet)席卷全球工业界。其目标是从物理上摧毁一个军事目标,这使得网络武器不仅仅只存在于那个人类创造的空间。网络武器的潘多拉魔盒已经打开。 🕤 1.1.1 信息的定义 被交流的知识 关于客体(如事实、概念、事件、思想、过程等)的知识

    2023年04月24日
    浏览(48)
  • 某医院内部网络安全分析案例

    背景 我们已将NetInside流量分析系统部署到医院的机房内,使用流量分析系统提供实时和历史原始流量。本次现场计划做整体流量分析,实际分析发现异常流量,因此针对此次异常流量进行排查和分析。 现象 分析发现NetInside系统获取到的流量很小,每秒几兆的情况(中间出现

    2023年04月11日
    浏览(45)
  • 江西公安公布多起网络安全案例

    案例一、 2023年3月,南昌市公安局工作发现,江西某职业技术大学师生个人信息疑似遭泄露。依据《数据安全法》第二十七条、第四十五条之规定,对该学校给予行政处罚。 经查,该学校未健全全流程数据安全管理制度,未采取数据加密等相应技术措施保障数据安全,导致学

    2024年04月27日
    浏览(37)
  • 网络安全实验——web安全

    目录 实验目的 实验原理 实验内容 实验1 1. 地址栏中执行脚本 2. 对DOM技术的利用 实验2  1.jump1 2.jump2 3.get 4.xss 5.注册bss 6.盗取cookie 7.分析cookie  实验3 一.搭建IIS服务器 二.身份验证和权限设置 三.IP地址和域名限制 四.安全通信 五. 单点登录  实验总结 1. 了解什么是XSS 2. 掌握盗

    2024年02月13日
    浏览(46)
  • 网络安全-Web端安全协议

    大家上网娱乐或办公总是离不开浏览器,也就是从web端访问各个网站,其安全的重要性与其使用的广泛性成正比。本文就web端常见的相关安全协议分享。 SSL(Secure Sockets Layer),安全套接层,它是在传输通信协议(TCP/IP)上实现的一种安全协议,它位于应用层协议之下且独立的

    2024年02月08日
    浏览(48)
  • 网络安全应急响应典型案例集

    本文是学习网络安全应急响应典型案例集(2021). 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 数据泄露指将机密信息、私人信息或其他敏感信息发布到不安全的环境中。数据泄露分为外部泄露和内部泄露两种,外部泄露典型如攻击者通过漏洞利

    2024年02月15日
    浏览(38)
  • 【信息安全案例】——网络攻击分析(学习笔记)

    📖 前言:随着信息技术的发展,网络空间的斗争可谓是兵家必争之地,网络攻击的事件层出不穷。道高一尺魔高一丈,了解常见的网络攻击类型有利于我们日后工作生活的安全稳定。 🔎 记一次Vulnstack靶场内网渗透(二) 🕤 1.2.1 欺骗攻击 利用TCP/IP协议本身的一些缺陷对

    2024年02月08日
    浏览(43)
  • 网络安全-安全Web网关(SWG)详解

    在当今快速发展的网络环境中,企业面临着越来越多的网络安全挑战。安全Web网关(SWG)作为一种高效的网络安全解决方案,为企业提供了一个安全、可控的网络使用环境。 安全Web网关是一种网络安全设备或服务,主要功能是监控和管理用户的Web访问,以防止恶意软件入侵和

    2024年02月01日
    浏览(52)
  • Web 学习笔记 - 网络安全

    目录 m前言 正文 XSS 攻击 简单示例 XSS 防御 CSRF  Web 安全方面的基本知识是有很必要的,未必就要深入理解。本文主要介绍常见的网络攻击类型,不作深入探讨。 网络攻击的形式种类繁多,从简单的网站敏感文件扫描、弱口令暴力破解,到 SQL 注入,再到复杂的网络劫持等,

    2023年04月24日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包