密碼學之hash長度擴充套件攻擊

2022-07-11 20:27:10 字數 1746 閱讀 8969

雜湊和加密的區別

雜湊(hash)與加密(encrypt)兩者是完全同的概念,正確區別兩者是正確選擇和使用雜湊與加密的基礎

雜湊與加密最大的不同在於:

雜湊將目標轉化成具有相同長度的、不可逆的雜湊字串

而加密將目標轉化為不同長度的、可逆的密文,長度一般隨明文增長而增加

如果被保護資料僅僅用作比較驗證,在以後不需要還原成明文形式,則使用雜湊;如果被保護資料在以後需要被還原成明文,則需要使用加密。

hash長度擴充套件攻擊是hash函式本身的乙個演算法缺陷攻擊,我門已經在前面研究了md5演算法的加密過程。

我們從具體的題來對這個攻擊進行理解:

首先對其進行目錄掃瞄,發現了index.php~     這個是php的備份檔案,但是無法直接開啟,我們可以將其放在linux下,將其重新命名,並用vim -r index.php開啟便成功恢復為php**。

**不長,我們來簡單進行審計下

?php

$auth = false;

$role = "guest";

$salt =

if (isset($_cookie["role"])) else else else {

$auth = false;

我們仔細看這段**通過cookie傳入的值,滿足role=admin很容易,我們直接在包裡修改就可以了,但是因為不知道salt的值,我們無法滿足hsh=md5(salt+role),修改了role和hsh的值,無法滿足等式成立。

而伺服器則將認證資訊都存在使用者的瀏覽器的cookie裡,而伺服器只需保留salt的值便可以驗證使用者的身份了,但是這樣會存在雜湊長度擴充套件攻擊,可以在不知道salt的情況下讓等式成立,成功成為管理員。

可我們知道hash1(第一次伺服器正常的身份資訊),和admin(我們自己加上的嘛),那麼我們做一次hash1和admin的md5運算不就得到hash2了嘛(不需要使用salt)。把hash2賦值給hsh,傳入就滿足了hsh=md5(salt+role),相當於直接使用了第一次salt運算後的hash1來對hash2進行加密,這樣無需知道salt的值便可完成運算,完成身份驗證。

這道題的主體就是這樣,對於雜湊長度擴充套件攻擊的防護也很簡單,只需要將使用者資訊加在salt前面級就行了。因為hash是從前向後分塊進行運算的。

可以使用hashpump來進行這種攻擊

hashpump是乙個借助於openssl實現了針對多種雜湊函式的攻擊的工具,支援針對md5、crc32、sha1、sha256和sha512等長度擴充套件攻擊。而md2、sha224和sha384演算法不受此攻擊的影響,因其部分避免了對狀態變數的輸出,並不輸出全部的狀態變數。

kali下安裝hashpump

git clone

apt-get install g++ libssl-dev

cd hashpump

make

make install

至於想在python裡實現hashpump,可以使用hashpumpy這個外掛程式:

(注意還是得先安裝了libssl-dev)

pip install hashpumpy

python

>>> import hashpumpy

>>> help(hashpumpy.hashpump)

直接用hashpump生成

將生成的新的md5通過cookie傳入,便成功成為管理員。

密碼學 密碼學中幾種攻擊模式

本科畢業設計做完之後,一直覺得自己需要系統來學習一下密碼學,密碼學是乙個古老的學科,前人已經研究了太多太多,而伴隨著量子計算的逐漸發展,之前制定出來的密碼演算法都面臨著被淘汰的危險。今天記錄一下根據密碼分析者知道資訊的多少,密碼學中分為常見的幾種攻擊模式,以及它們主要用於什麼場合。在介紹攻擊模式之前...

密碼學攻擊型別

在假設密碼分析者已知所用加密演算法全部知識的情況下,根據密碼分析者對明文 密文等資料資源的掌握程度,可以將 針對加密系統的密碼分析攻擊型別分為以下四種 ciphtext only attack 在惟密文攻擊中,密碼分析者知道密碼演算法,但僅能根據截獲的密文進行分析,以得出明文或金鑰。由於密碼分析者所...

密碼學原理 hash函式

hash 函式的特點 將可變長度的資料塊作為輸入,產生固定長度的hash值。hash函式應該具備的特性 單向性和抗碰撞性。hash函式的應用 保證資料完整性。訊息認證是用來驗證訊息完整性的一種機制或服務,訊息認證保證傳送方和接收方的資訊一致,通常還要保證傳送方的身份真實有效。上圖展示了hash碼不同...