BugkuCTF –备份是个好习惯

在做到Bugku的一道题目时,感觉知识点有些多,这里总结一下。

题目连接http://120.24.86.145:8002/web16/

打开界面只有这一串字符串


尝试各种解密解码格式都没有效果,可以观察到整个字符串是d41d8cd98f00b204e9800998ecf8427e的两段重复,其实是MD5加密,最后再揭晓。

那现在怎么办呢,按照题目  备份是个好习惯,是让我们寻找  .bak文件的,也就是说

存在某个文件的.bak文件可以访问,那就试试  http://120.24.86.145:8002/web16/index.php.bak,就拿到了提示文件,好确实有点让新手小白有点难以接受,这里想推荐一航大佬的一款源码泄露工具,可以自动访问常见的CTF线索文件,如果返回正常说明文件存在。

下载地址 https://coding.net/u/yihangwang/p/SourceLeakHacker/git?public=true

运行效果:



我们可以看出有 index.php 和index.php.bak 的状态码为200 ,说明文件存在。

文件下载下来,这里用sublim打开:

 

include_once “flag.php”;
ini_set(“display_errors”, 0);
$str = strstr($_SERVER[‘REQUEST_URI’], ‘?’);
$str = substr($str,1);
$str = str_replace(‘key’,”,$str);
parse_str($str);
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag.”取得flag”;
}
?>

整段代码的意思是将get的两个参数中的key替换为空(这里可以用kekeyy绕过),然后对key1,key2的值进行md5加密,并进行比较,

如果md5加密的值一样而未加密的值不同,就输出flag.

有两种方法绕过:

1,md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。


2,利用==比较漏洞

如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。

下列的字符串的MD5值都是0e开头的:

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a


最后看看d41d8cd98f00b204e9800998ecf8427e是什么意思,拿到MD5解密试一下,结果为NULL,也就是说这是NULL的MD5值,因为默认是没有传入key1和key2的,这两个值也就是null.


文章同步到我的博客:http://www.zjzhhb.com/archives/190

转载指明出处

猜你喜欢

转载自blog.csdn.net/zpy1998zpy/article/details/80582974