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就轻松的爆出来了。。。

猜你喜欢

转载自blog.csdn.net/qq_42133828/article/details/84871544
今日推荐