集训第四周 星期五
知识点:写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,至于为什么,我也不知道,反正就是可以。没了。