记录一下本身对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中就能够了