Loading

强网拟态-web-easy-filter

代码

<?php
    ini_set("open_basedir","./");
    if(!isset($_GET['action'])){
        highlight_file(__FILE__);
        die();
    }
    if($_GET['action'] == 'w'){
        @mkdir("./files/");
        $content = $_GET['c'];
        $file = bin2hex(random_bytes(5));
        file_put_contents("./files/".$file,base64_encode($content));
        echo "./files/".$file;
    }elseif($_GET['action'] == 'r'){
        $r = $_GET['r'];
        $file = "./files/".$r;
        include("php://filter/resource=$file");
    }

 

 

思路就是分为两部分,第一部分会base64写入你设定的内容,第二部分就是你输入文件名,并且用filter读取

同时这里不能任意文件读取,因为又basedir,因此思路是写入system语句,再include引入来包含想执行的语句

但是你只能输入文件名(或者目录),因此要想办法拼接出语句先对base64解码再包含

 

根据一番测试(没找到理论依据)

发现例如:

php://filter/resource=./files//convert.base64-decode/a/../=/../../56514a1d2f

发现只要过滤器字段含有convert.base64-decode即可,无论位置在哪,也不用read=

然后看目录:我们访问当前目录的files的子目录convert.base64-decode(虽然不存在,但是有这句话就会执行base64解码),然后去了不存在的子目录a,然后返回上一级,然后访问然后去了不存在的子目录等于号,然后返回上两级,访问56514a1d2f

当然根本不用这么麻烦,我这里演示一下就是resource后面的路径不会检测是否合法,同时里面有各种解析语句也会被执行。

 

简洁的payload:   ?action=r&r=/convert.base64-decode/../56514a1d2f(md5)

 

posted @ 2021-10-28 20:02  Aninock  阅读(53)  评论(0编辑  收藏  举报