參考:
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