参考:
https://github.com/ticarpi/jwt_tool/wiki/Attack-Methodology
https://zhuanlan.zhihu.com/p/93129166
https://book.hacktricks.xyz/pentesting-web/hacking-jwt-json-web-tokens
简介
jwt ,全称 json web token ,以 json 对象的形式安全的传递数据。因为这些信息被数字签名,所以保证了其完整性。
使用场景:授权(通常在认证成功后返回,跟 sessionid 类似)、信息交换。
结构:Header.payload.signature
安全测试
用到的工具:
- 在线解码、编码:https://tooltt.com/jwt-decode/ https://tooltt.com/jwt-encode/
- 本地工具:https://github.com/ticarpi/jwt_tool
可能存在的问题
- 服务端可能不检查签名。尝试直接更改 payload 部分,若响应和未更改之前相同,则服务端未检查。
- 若采用对称加密算法,则可以尝试暴力破解获取 secret。
- jwt token 的来源,如果第一次出现的地方是在客户端的请求,说明 secret key 在客户端代码里。
- CVE-2015-9235 。将 header 中的 alg 更改为 none ,jwt 库就不会检验签名。
jwt_tool.py -X a
- CVE-2016-5431。若采用非对称加密(RAS 等),尝试将其修改为对称加密算法(HS256、HS512 等)。并将服务端的公钥作为 secret 。
jwt_tool.py -X k
- CVE-2018-0114。伪造密钥。如果 header 中存在
jwk
,则可以尝试利用。 - CVE-2020-28042。将签名删除,检测能否成功。
jwt_tool.py -X n
- 如果header 中有
jku、kid、x5u、x5c、JTI
,可以参考进行利用。https://book.hacktricks.xyz/pentesting-web/hacking-jwt-json-web-tokens