jwt攻擊手段
阿新 • • 發佈:2020-09-10
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之後,逆向太菜了,沒搞出來。
相關工具: