JWT的越权

JWT
简单的说明一下,JWT由三部分组成,它们之间用圆点(.)连接。 这三部分分别是:
Header(头部)
Payload(载荷)
Signature(签证)
因此,一个典型的JWT看起来是这个样子的:
xxxxx.yyyyy.zzzzz
jwt解密:https://jwt.io/
(注意,不要在JWT的payload或header中放置敏感信息,除非它们是加密的。)
jwt 漏洞主要利用类型如下:
①哈希禁用:即上图中 "alg":"hs256" 处位置 删除哈希类型即可实现越权
②爆破弱密钥:即上图中 your-256-bit-secret 处内容为弱口令,使用脚本字典爆破即可实现越权
③未验证签名:如下文所示案例,伪造密钥 这里用Hackthebox - TheNoteBook演示 nmap
Nmap scan report for 10.10.10.230
Host is up (0.29s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 86:df:10:fd:27:a3:fb:d8:36:a7:ed:90:95:33:f5:bf (RSA)
| 256 e7:81:d6:6c:df:ce:b7:30:03:91:5c:b5:13:42:06:44 (ECDSA)
|_ 256 c6:06:34:c7:fc:00:c4:62:06:c2:36:0e:ee:5e:bf:6b (ED25519)
80/tcp open http nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: The Notebook - Your Note Keeper
8000/tcp open http SimpleHTTPServer 0.6 (Python 3.6.9)
|_http-server-header: SimpleHTTP/0.6 Python/3.6.9
|_http-title: Directory listing for /
10010/tcp filtered rxapi
一个初始主页为
进入login 尝试弱口令登录,无法登录。
再通过注册页面,注册用户。 成功注册后发现仅有添加记录功能,因此思考漏洞方向,可能为 越权
将当前用户cookies 进行 base64 解码,发现提示JWT
所以把令牌放在jwt.io
在解码结果中"kid": "http://localhost:7070/privKey.key"
因此思考,漏洞方向为 私钥冒充(如果没有写死kid,可以考虑尝试禁用hash,爆破弱秘钥) 细节点,上图中 payload处 ”admin_cap“ 用于控制用户权限,当admin_cap 修改为1 表示为 admin权限
openssl genrsa -out privKey.key 2048
python3 -m http.server 7070
修改原本JWT中 kid 以及 admin_cap 所对应参数
通过burp 替换cookies ,在用户页面出现管理员面板,成功提权
参考
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录