补天沙龙一道曲折的CTF题
昨天参加了补天白帽子沙龙·成都站。期间,主办方搞了一道CTF,一共三个关卡,最终拿到Flag可以获得奖品。
先吐槽一下,第一个关卡的tips出来之前我的电脑就断电了(主办方都不准备个电源插头之类的,差评)!于是只能眼睁睁看着会场上各位表哥去夺旗了。
0x01 关卡一
关键字:PHP弱类型、“0e”、爆破
http://btctf.secbox.cn/
放出题后很长时间没有tips,这段时间应该做出来这道题吧!当我电脑断电自动关机的时候,放出了tips 1 (无语凝噎……)
tips 1:
<?php
$flag = '{下一关地址}';
$name = $_POST['name'];
$pass = encode($_POST['pass']);
$admin_user = "admin";
$admin_pw = get_hash("0e260265122865008095838959784793");
if ($name == $admin_user && $pass == $admin_pw){
echo $flag;
}else{
echo "Guess it ?";
}
function get_hash($hash) {
return preg_replace("/[^0-9a-f]/","",$hash);
}
function encode($str) {
return get_hash(md5(md5($str) . "SALT"));
}
?>
是不是看到了熟悉的‘0e’打头的md5,这里需要密码的encode函数加密后内容为‘0e’打头即可成功获取下一关地址。
其实0e开头的字符串会被php解析为0,这是一个叫做‘Magic Hash’的PHP漏洞,我们来看看Freebuf上的介绍:
最近一个被称为“Magic Hash”的PHP漏洞可以使得攻击者非法获取用户的账号信息。漏洞原因是PHP以一种特定的方式处理被哈希的字符串,攻击者可以利用其从中尝试并可能获取密码,绕过登录认证系统和其它运行在PHP哈希比较之上的函数。
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。
简而言之,md5后的‘0e’==‘0e’结果为真。
那么这里的md5(md5(str),"SALT")
该如何得到这样一个符合条件的pass呢?看来只有爆破了。可以在web上直接爆破,亦可以在本地搭建环境爆破,这样会快很多。
符合条件的结果理论上不止一个,不过这里有一个就可以了。比如:62778807
提交得到下一关地址:
0x02 关卡二
关键字:验证码加密解密、PsQREdit
http://btctf.secbox.cn/7c43bc96790717a772d50754f9f1f7e6/
右键源代码看到下面信息:
<head>
<title>还我血汗钱</title>
<p>muhe带着小姨子跑了,还我Flag!!!</p>
<!--tips:tieba&机器人-->
</head>
<body>
于是听话地去贴吧看看吧:
看到那张二维码,后来官方给出了tips 2:鸟叔英文名+二维码英文
Psr/qr code 就在说那个工具吧:PsQREdit
需要密码,这个时候想起了robots里边的passwd:
http://btctf.secbox.cn/7c43bc96790717a772d50754f9f1f7e6/passwd
得到一个64位字符串,前后解密分别为butian/ctf,密码就是butianctf,拿到下关地址:
关卡三
关键字:Apk逆向
http://btctf.secbox.cn/m/x/n/y/xiaolu.apk
不懂apk逆向,找同学去玩了,出来了更新在这里。(好吧,貌似出官方WP了)
tips 3:就一个简单的tea加密,把解密的结果放到apk里重打包运行就行了,密钥在Java里都是明文
官方WP已出,看这里=>
http://mp.weixin.qq.com/s?__biz=MzA5ODMyMzQ1OQ==&mid=2698432170&idx=2&sn=fca45954b312310610e5e88e9488c615&chksm=b5b133c682c6bad09b34d0afee9710385c593286c0f173069bbe11e0cd77f796d6b21b776002&scene=0#wechat_redirect