回想一下,JWT HS256 是使用Secret計算的。計算的確切格式是
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
因此,有理由認為,由於我們擁有完整的 jwt token,以及標頭和有效載荷,因此可以通過暴力破解來獲取完整的 JWT 令牌。如果這個secret可以被暴力破解,那麼攻擊者就可以簽署他自己的 JWT token。
為了暴力破解這些秘密,我們將使用一個名為jwt-cracker的工具。jwt-cracker 的語法是jwt-cracker <token> [alphabet] [max-length]
字母表和最大長度是可選參數。
參數說明:
Token | The HS256 JWT token |
Alphabet | 破解者用於檢查密碼的字母表(默認:“abcdefghijklmnopqrstuvwxyz”) |
max-length | 秘密的最大預期長度(默認為 12) |
安裝
npm install --global jwt-cracker
練習
試著破解這個JWT token吧!
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.it4Lj1WEPkrhRo9a2-XHMGtYburgHbdS5s7Iuc1YKOE
利用這套工具,我們只用20秒就破且取得secret了。