前言:JWT(JSON Web Token)是一种用于双方之间传递安全信息的简洁的、URL安全的表示方法。JWT可以使用HMAC算法或使用RSA的公钥/私钥对进行签名。JWT的结构由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。用.进行分隔;头部包含了描述令牌类型和所使用的加密算法的元数据;载荷包含了要传输的数据,如用户ID、角色和其他相关的声明信息;签名是对头部和载荷进行签名生成的,用于验证令牌的真实性和完整性。
在JWT的使用过程中,可能会遇到一个安全问题:即使用空的签名。在JWT中,签名部分是可选的,如果不需要进行签名验证,可以留空。
1.某次挖洞过程中,发现系统使用了jwt进行鉴权:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsInVzZXJzX2lkIjozfQ.i4fy8ebMDna72TgijA2t0AsNB6F6_hdVZcLAd22qsAs
尝试将签名删除(即把第二个.后面的内容删除),重新发送请求,发现依然可以正常获取数据:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsInVzZXJzX2lkIjozfQ.
2.修改jwt中的payload中的user_id为1,原本为3:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsInVzZXJzX2lkIjoxfQ.
对请求包的authorization进行替换,发送请求,成功获取管理员的数据:
原文始发于微信公众号(hacker30):JWT认证缺陷导致的越权
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论