JWT(JSON Web Token),用于在网络应用环境间安全传递声明。通常用于身份验证和信息交换,因其紧凑、自包含且易于传输的特性而被广泛使用。
JWT 由三部分组成,用点号.分隔:Header(头部)、Payload(负载)、Signature(签名)
用户登录:客户端发送凭据(如用户名和密码)到服务器。
生成 JWT:服务器验证凭据后,生成 JWT 并返回给客户端。
存储 JWT:客户端存储 JWT(通常在 localStorage或 sessionStorage中)。
发送 JWT:客户端在后续请求的 Authorization头中携带 JWT。
验证 JWT:服务器验证 JWT 的签名和有效期,确认请求合法性。
(1)JWT 的优点
无状态:服务器无需存储会话信息,所有数据都在 JWT 中。
跨域支持:适用于分布式系统和跨域认证。
安全性:通过签名确保数据完整性和真实性。
(2)JWT 的缺点
无法撤销:一旦签发,JWT 在有效期内无法撤销,除非设置较短的有效期或使用黑名单。
存储问题:JWT 存储在客户端,可能面临 XSS 攻击风险。
数据暴露:负载中的数据是 Base64 编码,非加密,敏感信息需额外加密。
靶场地址:https://portswigger.net/web-security/all-labs#jwt
Lab: JWT authentication bypass via unverified signature
实验目标:请修改会话令牌以访问/admin的管理面板,然后删除用户carlos。
(1)登录靶场提供的账号/密码wiener:peter
(2)点击My account,进行抓包,发现cookie是一串ey开头的代码,并用点号.隔开
(3)jwt解码,观察内容
jwt解码网址:https://jwt.io/
(4)回到burp,选中jwt的payload部分,在右侧将wiener修改为administrator,点击Apply change
(5)请求部分改为/admin,并观察响应包,发现成功
(6)再次把请求部分改为/admin/delete?username=carlos,实验解决
亲爱的朋友,若你觉得文章不错,请点击关注。你的关注是笔者创作的最大动力,感谢有你!
原文始发于微信公众号(菜根网络安全杂谈):JWT漏洞初步了解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论