記錄一下本身對hash擴展攻擊的一些理解,hash擴展攻擊主要應用於身份認證,好比對於成功登陸的用戶能夠賦予其一個採用hsah算法加密的cookie值,其中含有未知的密鑰。php
此後每次在服務器端驗證此cookie中的憑證是否正確html
if ($hsh !== md5($SECRET . $_COOKIE["auth"])) { die("error"); }
上端代碼中密鑰存儲在服務器端,auth在客戶端存儲,hsh爲登錄成功的用戶所擁有,那麼做爲攻擊者,咱們已知hash後的密文,若是直到密鑰長度,就能夠再次構造hash值使等式算法
成立。hash擴展攻擊適用於md5,sha1,其原理http://blog.chinaunix.net/uid-27070210-id-3255947.html,這篇文章能夠看看,主要知道如下幾點:服務器
1.對於hash的消息要進行補位到mod 512 餘 448bit,按64字節分組
cookie
2.下一組明文的摘要的初始iv須要用到上一組明文的摘要值app
全部咱們在已知一組hash值的狀況下,只須要對原始明文進行擴充就能夠了在不知道密鑰的狀況下獲得另外一個合法hash值。函數
好比原始數據爲測試
$_COOKIE["auth"]=「wfz」; $secret = "flag" $hsh = md5("flag"."wfz")
此時做爲攻擊者,咱們有了hsh值,假設已知密鑰的長度,就能夠對原始消息進行填充ui
$new_msg = "xxxx"."wfz".padding
此時$new_msg已經知足64字節,而後咱們就能夠在$new_msg後面填充上想要添加的任何值編碼
好比
$append = "hacker"
而後就獲得了payload = 「wfz」.padding."hacker"
接着只須要將以前已經獲得的$hsh的值做爲新的md5摘要運算的初始iv,而且對新添加的值$append = "hacker"進行加密
就能獲得一串hash值
<html> <form> <form> </html> <?php error_reporting(0); $SECRET = "flag"; if (isset($_COOKIE["auth"]) && isset($_COOKIE["hsh"])) { $hsh = $_COOKIE["hsh"]; echo $hsh; echo "\n"; echo md5($SECRET . urldecode($_COOKIE["auth"])); if ($hsh !== md5($SECRET . urldecode($_COOKIE["auth"]))) { echo md5($SECRET . urldecode($_COOKIE["auth"])); echo "</br>"; echo md5($SECRET . $_COOKIE["auth"]); echo "</br>"; die("error"); } else{ echo "success"; } } else { echo "hsh:".md5($SECRET . urldecode($_COOKIE["auth"]))."</br>"; echo "input auth and hsh"; } ?>
本地測試如上,爲了方便,改cookie用get,都是同樣的原理,此時有了hsh:34503d694103892c2f8b709f8440ab5b
而後利用hashpump,構造新的hash值
hsh=e9ce9ebaab0a671ec8edddda705a7dae
payload=wfz\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00hacker
由於源碼是通過urldecode,因此這裏將payload通過urlencode函數編碼一次,這裏要用php的urlencode函數編碼,不要用在線的url編碼或burp中的url編碼,編碼出來會不同
因此最終的payload爲auth=wfz%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%008%00%00%00%00%00%00%00hacker;hsh=e9ce9ebaab0a671ec8edddda705a7dae
放在cookie中就能夠了