免责声明
本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。
如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。
文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。
01
什么是JWT
JSON Web Token(JSON Web令牌)是一种跨域验证身份的方案。JWT不加密传输的数据,但能够通过数字签名来验证数据未被算改常用于分布式站点的单点登录。JWT的声明一般被用在客户端与服务端之间传递身份认证信息,便于向服务端请求资源。
1、用户端登录,用户名和密码在请求中被发往服务器。
2、(确认登录信息正确后)服务器生成JSON头部和声明,将登录信息写入JSON的声明中(通常不应写入密码,因为JWT是不加密的),并用secret用指定算法进行加密,生成该用户的JWT。此时,服务器并没有保存登录状态信息。
3、服务器将JWT(通过响应)返回给客户端。
4、用户下次会话时,客户端会自动将JWT写在中HTTP请求头部的Authorization字
段中。
5、服务器对JWT进行验证,若验证成功,则确认此用户的登录状态。
6、服务器返回响应。
02
结构组成
JWT分为三部分:头部(Header)、声明(Claims)、签名(Signature),三个部分以英文句号隔开。JWT内容以Base64URL进行了编码。
03
环境搭建
这里使用Webgoat
3.2 部署webgoat
https://github.com/WebGoat/WebGoat/releases/tag/v8.2.2
需要JDK高版本,这里用JDK17
输入命令 java -jar webgoat-server-8.8.8.jar启动
访问127.0.0.1:8080/WebGoat
04
JWT伪造攻击
找到靶场
尝试更改您收到的令牌并通过更改令牌成为管理员用户,一旦您成为管理员,就会重置投票
4.1 复现
可以看到我们现在的用户是tom用户
点击重置并抓包
数据包中使用JWT作身份验证
抓取返回包提示只有管理员才有重置权限
将那段Cookie中的JWT字段解密一下这里使用Burp商店自带的JWT解密
将false改为true发包测试
提示签名不对
将签名算法HS512改为none
因为签名算法为空,所以JWT第三部分签名部分直接去掉
放包
成功重置。
05
JWT身份验证攻击
5.1 复现
JWT密钥爆破攻击
将该JWT数据解密
https://jwt.io/ 在线转化网址
将username改为WebGoat 将exp字段改大
爆破密钥
用hashcat爆破
https://github.com/hashcat/hashcat
hashcat -m 16500 jwt.txt -a 3 dict.txt
-m 16500:这里的16500对应的就是JWT的爆破
-a 3:代表蛮力破解
-w 3:可以理解为高速破解,就是会让桌面进程无响应的那种高速(可省略)
jwt.txt:要求破解的JWT文件
dict.txt:字典文件
爆破出密钥之后,替换密钥生成新JWT
5.2 靶场二
通过修改令牌让tom进行付款
点击checkout抓包
看到Authorization字段为空
查看日志
里面出现JWT字段
解密
修改字段
成功让tom购买
JWT不仅可以验证身份还可以传输数据,因此JWT还可以结合SQL注入进行攻击
06
JWT结合SQL注入
让Jerry越权删除Tom
点击删除抓包
复制JWT查看内容
通过查询源码可以看到查询sql语句
构造sql注入语句
hacked' UNION select 'delete' from INFORMATION_SCHEMA.SYSTEM_USERS --
同时通过源码,可以看到密钥在用于检查 JWT 声明之前已进行 base64 解码,因此我们反推,在数据库中存储的是经过base64编码的。
对delete进行base64编码后,新sql语句为
hacked' UNION select 'ZGVsZXRl' from INFORMATION_SCHEMA.SYSTEM_USERS --
修改JWT内容
eyJ0eXAiOiJKV1QiLCJraWQiOiJoYWNrZWQnIFVOSU9OIHNlbGVjdCAnWkdWc1pYUmwnIGZyb20gSU5GT1JNQVRJT05fU0NIRU1BLlNZU1RFTV9VU0VSUyAtLSIsImFsZyI6IkhTMjU2In0.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJpYXQiOjE1MjQyMTA5MDQsImV4cCI6MTY5ODkwNTMwNCwiYXVkIjoid2ViZ29hdC5vcmciLCJzdWIiOiJUb21Ad2ViZ29hdC5jb20iLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoiVG9tQHdlYmdvYXQuY29tIiwiUm9sZSI6WyJDYXQiXX0.CA6yHxOh0CtFrM1w5-nENuaqSeqnOR_muaJi-bFbbrI
替换发包
成功删除tom
联系客服