freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

JWT的越权
2022-01-17 14:14:04
所属地 四川省

JWT

简单的说明一下,JWT由三部分组成,它们之间用圆点(.)连接。 这三部分分别是:

  • Header(头部)

  • Payload(载荷)

  • Signature(签证)

因此,一个典型的JWT看起来是这个样子的:

xxxxx.yyyyy.zzzzzjwt解密:https://jwt.io/1642399248_61e506106f10db30279b0.png!small?1642399275897

(注意,不要在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

一个初始主页为1642399293_61e5063d664d20e3d16b4.png!small?1642399320728

进入login 尝试弱口令登录,无法登录。

1642399346_61e50672a09fbcb298736.png!small?1642399374041

再通过注册页面,注册用户。 成功注册后发现仅有添加记录功能,因此思考漏洞方向,可能为 越权

1642399352_61e50678d1186ce6b32c6.png!small?1642399380060

将当前用户cookies 进行 base64 解码,发现提示JWT

1642399368_61e5068841f7bd566f4a3.png!small?1642399395835

所以把令牌放在jwt.io

1642399375_61e5068fe4d043696ba0d.png!small?1642399403619

在解码结果中"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 所对应参数1642399385_61e506995ead38f64b0ec.png!small?1642399412768

通过burp 替换cookies ,在用户页面出现管理员面板,成功提权

1642399393_61e506a1a0523665dfd15.png!small?1642399420935

参考

https://zhuanlan.zhihu.com/p/86937325

# web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录