哈希长度拓展攻击条件
需要知道
- 密文长度 (SECRET)
- 明文 (哈希值)
- 部分密文内容 (auth)
HashPump安装
HashPump是一个借助于OpenSSL实现了针对多种散列函数的攻击的工具,支持针对MD5、CRC32、SHA1、SHA256和SHA512等长度扩展攻击。而MD2、SHA224和SHA384算法不受此攻击的影响,因其部分避免了对状态变量的输出,并不输出全部的状态变量。基于linux的(我装在kail上。
git clone https://github.com/bwall/HashPump
apt-get install g++ libssl-dev
cd HashPump
make
make install
安装后如果想在python2.7里实现hashpump,可以使用hashpumpy这个插件:
pip install hashpumpy
HashPump使用
借助与saBaFi安全沙场的-又要攻击哈希了。来说明。
题目链接
进入题目得到:
得到源码:
<?php
$auth = "uenit";
$SECRET="*";
echo "length is :".strlen($SECRET)."<br>";
if (isset($_GET["auth"])&&isset($_COOKIE["hash"]))
{
if($_GET["auth"]==$auth)
{
echo "wrong0";
exit();
}
$hash=$_COOKIE["hash"];
if ($hash!== md5($SECRET.urldecode($_GET["auth"])))
{
echo "wrong1";
exit();
}
}
else
{
setcookie("hash", md5($SECRET.$auth));
echo "wrong2";
exit();
}
echo "SeBaFi{*}";
exit();
我们知道密钥长度为12。
部分密文为:uenit
查看cook得到明文:aa6b13e05882f2b4959f80185d958f3f
利用工具:
alex@localhost:~# hashpump
Input Signature: aa6b13e05882f2b4959f80185d958f3f (明文)
Input Data: uenit(部分密文)
Input Key Length: 12 (密钥长度)
Input Data to Add: alex (签名,随意写)
60ea4ec10d36ef0391e09089081cd606
uenit\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\x88\x00\x00\x00\x00\x00\x00\x00alex
或者直接:
root@localhost:~# hashpump -s aa6b13e05882f2b4959f80185d958f3f -d uenit -k 12 -a alex
60ea4ec10d36ef0391e09089081cd606
uenit\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\x88\x00\x00\x00\x00\x00\x00\x00alex
然后我们把hash值放到cookie里。
再把得到的密文中的\x替换成%后,get提交
auth=uenit%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%88%00%00%00%00%00%00%00alex
即可。
python使用
>>> import hashpumpy
>>> help(hashpumpy.hashpump)
查看参数来使用。
参考:
pcat