bugku——备份是个好习惯

  这道题搁置了快一个月了……今天终于把它给做了,心情还是很舒畅的>-<

  首先打开题目,只有一串字符串,百度了一下发现是个md5加密,关键……原字符串还是个空字符串……(懵逼……)打开网页源代码也一样,没有任何提示,这时候,我们可以想到提示肯定是在题目里!备份是个好习惯~咦,是不是有一个备份文件呢?在题目的url里输入:http://120.24.86.145:8002/web16/index.php.bak,即可下载备份文件;

  **小知识:**备份文件的扩展名一般为*.swp,*.bak

  有点灵性做题2333,其实还有另外的两种比较靠谱的方法:①用御剑扫描;②用源码泄露工具(具体不再详述,之后可能会补上)

  接下来,我们用notepad++打开这个备份文件,可以看到里面的代码:


/**
 * 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";
}

  阅读代码,这里有几个函数:

  strstr(string,search,before_search):找到search字符串在string中第一次出现的位置,并把后面的字符串输出;before_search如果为true,则返回位置之前的字符串;默认为false;

  substr(string,start,length):看参数很容易理解,返回字符串的一部分;

  str_replace(find,replace,string,count):在字符串sting中找到字符串find,并把它替换成replace;

  parse_str(string,array):把查询字符串解析到变量中;

  然后我们可以知道这段代码的意思:代码从?后开始截取到str中,也就是变量后开始截取字符串;然后从位置1开始截到字符串结束;之后把字符串中的kay字段全用‘ ’替代,这个我们可以通过构造"kekeyy"来绕过;最后把key1和key2解析成变量;

  敲重点代码要求我们构造出key1和key2的md5值相等,而它们本身却不相等,这时候用到一个小知识点:md5无法对数组进行构造,构造的结果都为NULL,这样我们只要让key1和key2是两个数组就好

  构造url:http://120.24.86.145:8002/web16/?kekeyy1[]=1&kekeyy2[]=2

  出现flag。

你可能感兴趣的:(PHP,Bugku之Web)