Hashpump实现哈希长度扩展攻击

前面我就理论上分析了哈希长度扩展攻击的手法,有点烧脑,作为一个不怎么勤快的人,当然需要一个趁手的工具。这就是今天要讲的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>
<body>

<pre>
$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
    }
}
    </pre>
<h1>Admins Only!</h1>
<p>If you have the correct credentials, log in below. If not, please LEAVE.</p>
<form method="POST">
    Username: <input type="text" name="username"> <br>
    Password: <input type="password" name="password"> <br>
    <button type="submit">Submit</button>
</form>

</body>
</html>

分析可知,用户名为admin,密码不能为admin,且cookie中getmian的值需要和md5( secret.urldecode( username . password)1.secrect152.Md5( serect,”adminadmin”)的哈希。
3.用户名为admin。
整理下我们知道的数据:
1.Serrect的长度为15,再加上第一个admin就是20。
2.哈希值为571580b26c65f306376d4f64e53cb5c7。
3.data为第二个admin。
4.add数据为任意。

这里写图片描述

得到password的扩展为
admin\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\xc8\x00\x00\x00\x00\x00\x00\x00cck 对其进行反url编码,即用%替换\x。并把getmein写入cookie,值为e632fc1f589cbabfef8e847a1ceced90。

然后构造请求:

这里写图片描述

得到flag。完成测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值