前面我就理论上分析了哈希长度扩展攻击的手法,有点烧脑,作为一个不怎么勤快的人,当然需要一个趁手的工具。这就是今天要讲的HashPump。
HashPump是一个借助于OpenSSL实现了针对多种散列函数的攻击的工具,支持针对MD5、CRC32、SHA1、SHA256和SHA512等长度扩展攻击。
建议在kali中安装,随装随用。安装命令如下:
git clone https://github.com/bwall/HashPump
apt-get install g++ libssl-dev
cd HashPump
make
make install
至于在python中实现需要安装hashpump模块。直接用pip或easy_install安装都可以。
Pip install hashpump
使用时导入一下即可
python
import hashpump
以实验吧中的题为例。
解题链接: 请点这里
如图:
我们随便输入用户名和密码,比如admin和admin。
因为题目中提示要看服务端发生了什么,所以打开链接并用bp抓包。
发到repeater,go一下,看看服务回应了什么,回应如图:
我们发现一个奇怪的set-cookie字段,这个并不常见,其中有两个key,分别是simple-hash和sourece,可以考虑分别修改一下这两者的值,看看有什么变化,当修改sourece值时,源码出现,如图:
分析源码
html>
$flag = "XXXXXXXXXXXXXXXXXXXXXXX";
$secret = "XXXXXXXXXXXXXXX"; // This secret is 15 characters long for security!
$username = $_POST["username"];
$password = $_POST["password"];
if (!empty($_COOKIE["getmein"])) {
if (urldecode($username) === "admin" && urldecode($password) != "admin") {
if ($COOKIE["getmein"] === md5($secret . urldecode($username . $password))) {
echo "Congratulations! You are a registered user.\n";
die ("The flag is ". $flag);
}
else {
die ("Your cookies don't match up! STOP HACKING THIS SITE.");
}
}
else {
die ("You are not an admin! LEAVE.");
}
}
setcookie("sample-hash", md5($secret . urldecode("admin" . "admin")), time() + (60 * 60 * 24 * 7));
if (empty($_COOKIE["source"])) {
setcookie("source", 0, time() + (60 * 60 * 24 * 7));
}
else {
if ($_COOKIE["source"] != 0) {
echo ""; // This source code is outputted here
}
}
Admins Only!
If you have the correct credentials, log in below. If not, please LEAVE.