解题过程
了解到备份二字,说明可能存在备份文件。
备份文件的好处是:浏览器无法解析带有备份后缀的文件,之后会直接提供用户下载到本地,用户通过去掉备份后缀打开可以查看页面源代码进行代码审计
通过查找,查到index.php.bak这个备份文件
在浏览器输入后下载到本地返现是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";
}
?>
这里就存在过滤了
- 代码截取了?后面的传参值
- 代码将key字符过滤成‘‘ ,但是我们可以使用双写绕过
- parse_str是传入变量到str中去,解析str
- 之后是md5的加密
这里的问题就是,md5加密比较麻烦,但是md5不能解析数组
,所以我们传入数组即可
传入变量:
flag就出来了