type
status
slug
tags
category
icon
password
Property
Feb 6, 2023 06:33 AM
date
summary
简介
在最近的渗透中是不是会遇到使用JWT技术的网站,这里就来总结一下JWT上一些常见的攻击手法吧。
JWT特征
JWT是由三段信息构成的,将这三段信息文本用
.
链接一起就构成了Jwt字符串。就像这样:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcE
第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).
可以通过这个网站编解码jwt的payload等https://jwt.io/
攻击手法
checklist
敏感信息泄露
因为header和payload都是base64编码后得到的所以我们可以轻松的到编码前的信息内容,而这之中可能就存在敏感信息
修改签名算法
因为第一部分是用于指明使用的算法,如果服务器配置不当,就会导致信任客户端传递过来的指定算法例如(none),服务器会在 JWT 中删除相应的签名数据(这时,JWT 就会只含有头部 + ‘.’ + 有效载荷 + ‘.’),然后将其提交给服务器
JWT密钥爆破
因为JWT算法是公开的,如果服务器设置的密钥比较简单,这时候我们可以尝试爆破
爆破字典
或者尝试使用Google colab爆破效率奇高
jwk注入
A JWK (JSON Web Key) is a standardized format for representing keys as a JSON object.
You can see an example of this in the following JWT header:
就是服务器信任客户端传递的jwk来验证签名
jku注入
和上面类似信任了客户端传递的其他jwk,只不过这种是使用url传递方式
文件密钥注入
这种漏洞就是如果服务器kid为某个密钥文件名,可以将其指定到/dev/null空密钥然后自己再用空密钥签名
使其指定到空文件
创建空的对成加密密钥
重新签名发送
练习环境
修改签名算法
http://demo.sjoerdlangkemper.nl/jwtdemo/hs256.phphttp://demo.sjoerdlangkemper.nl/jwtdemo/public.pem
修改签名算法
http://challenge01.root-me.org/web-serveur/ch58/
爆破
http://challenge01.root-me.org/web-serveur/ch59/
密钥泄露
http://challenge01.root-me.org/web-serveur/ch60/