WMCTF2020 web之web_checkin

这道题是自己没有做出来,当时也没有认真做,最后看看来NU1L的wp才知道思路。
NU1L真的太强了,向他们看齐!!!

题目:web_checkin


//PHP 7.0.33 Apache/2.4.25
error_reporting(0);
$sandbox = '/var/www/html/' . md5($_SERVER['REMOTE_ADDR']);//remote_addr代表客户端的IP
@mkdir($sandbox);//创建一个文件
@chdir($sandbox);//进入这个文件
highlight_file(__FILE__);
if(isset($_GET['content'])) 
{
     
    $content = $_GET['content'];

    if(preg_match('/iconv|UCS|UTF|rot|quoted|base64/i',$content))//没有弄明白这里是为什么?
         die('hacker');

    if(file_exists($content))//file_exists() 函数检查文件或目录是否存在。
        require_once($content);
        
    file_put_contents($content,'.$content);
    //file_put_contents() 函数把一个字符串写入文件中。
}

他们是wp就一句话:?content=/flag
难道flag在根目录下面?
于是自己搭建环境测试确实可以获得flag,(使用绝对路径获得,这样可以避免进行修改,但是也应该是没有权限写入吧?)
先放着这里,过几天官方出wp在想一想吧!

想法
结合这个题,我想到了file_exists()函数可能存在绕过,这个例子来源于网络。


highlight_file(__FILE__);
$file=$_GET['file'];
//file_exists这个函数允许传入的路径中含有特殊符号
if(file_exists($file)){
     
echo "hacker!!!";
}else{
     
include($file);
}
?>
//flag.php

flag{
     nice_to_meet_u0}

正常输入如果文件存在就会输出hack!!!
使用我们可以构造一个系统没有的文件夹然后…/绕过来绕过。
payload:

?file=./nice/../flag.php

这个思想来自DASCTF7月的比赛
题目链接

你可能感兴趣的:(ctf,php,ctf,web)