实验吧 让我进去

集训第四周 星期五

知识点:写CTF题,应该习惯行的看一下源码,扫一下目录,抓一下包

哈希长度扩展攻击:

https://www.freebuf.com/articles/web/69264.html

打开题后发现一个登陆框,以为是SQL注入,但实际上并不是。然后抓包,在cookie里看见一个东西“source”等于零,让后改成一,发包,看见了源码。

$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
    }
}

经过一番观察,发现应该是哈希长度宽展漏洞。这里给一篇博客哈希长度扩展攻击讲解

我对哈希长度扩展攻击的理解:

有一个密钥,和你要加密的东西。经过MD5加密,生成密文。而我们就是要在不知道密钥的情况下,给你一模一样的要加密的东西,生成一样的密文。而这道题还加了点料,让你加密的东西也不一样。假设提交的username=admin,password=aaa,也就是说服务器会判断MD5(密钥+adminaaa)是否等于刚才的MD5(密钥+adminadmin)。这是肯定不会相等的,现在就需要你提交getmein,username,password。
这里还需要一个软件,hashpump
在这里插入图片描述
让username=admin 这是必须的
password=admin%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%a0%00%00%00%00%00%00%00adminaaa
再在cookie里设置一个getmein:10a49480bef0c10f57ac378b69941928
这样才服务器上执行的过程就是MD5(密钥+adminadminadmin%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%a0%00%00%00%00%00%00%00adminaaa),它最后会等于10a49480bef0c10f57ac378b69941928,至于为什么,我也不知道,反正就是可以。没了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值