1. 程式人生 > 實用技巧 >jwt攻擊手段

jwt攻擊手段

jwt

祕鑰洩漏/敏感檔案洩漏

在一些配置檔案被我們可查的情況下,包括各種檔案讀取,原始碼洩漏,此時偽造身份就變得很容易了。

空加密演算法

對於明文的加密演算法通常為HS256,在jwt中分為三個部分,以點分割

=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXRpZCI6MSwidXNlcm5hbWUiOiJ0ZXN0IiwicGFzc3dvcmQiOiJ0ZXN0IiwiaWF0IjoxNTk5NzIzNTg0fQ.7vusJvfKRNY8Or2KnUCEoJhKfseOM6-RyAwgLw3WrLU

在第一部分header這裡:

{
  "alg": "HS256",
  "typ": "JWT"
}

JWT支援使用空加密演算法,只要我們在header中指定alg這個引數為None

{
    "alg" : "None",
    "typ" : "jwt"
}

此時這個加密演算法就不存在,那麼這個加密祕鑰就沒用了。

const token = jwt.sign({secretid, username, password}, secret, {algorithm: 'HS256'});
關於KID的修改
kid也是jwt header中的一個可選引數,作用就是指定加密演算法的金鑰。  

當kid變得可控的時候,就優惠出現很多安全的問題,例如:

任意檔案讀取:kid如果從檔案讀取,在服務端上沒有做任何的限制的時候,那麼kid就可能讀取到別的檔案,就例如/etc/passwd。 

sql注入:當kid從資料庫當中獲取,那麼可能存在著sql注入。   
修改RSA加密演算法為HMAC

在JWT中,除了HS256代表的HMAC還有RSA等加密方式,即RS256。

HMAC是金鑰相關的雜湊運算訊息認證碼,他是使用相同的金鑰對傳輸資訊進行加解密。

RSA則是一種非對稱加密演算法,使用私鑰加密明文,公鑰解密密文。  

這種攻擊方式的利用就是

JWT傳輸過程中使用RSA演算法,用私鑰進行了加密,最後公鑰進行了解密驗證。

私鑰我們可能搞不到,但是公鑰我們可能可以搞到。

此時改一下加密方式:

{                                   {
    "alg" : "RS256",  ---->>>>>     "alg" : "HS256",
    "typ" : "jwt"                      "typ" : "jwt"
}                                    }

此時HMAC被服務端判斷,這個時候服務端按照HMAC的方式自動使用公鑰進行解密驗證。

爆破

jwt可以進行爆破,前幾天的DDCTF第一道題就是強制的爆破,可惜後面拿到了client之後,逆向太菜了,沒搞出來。

相關工具:

https://github.com/brendan-rius/c-jwt-cracker