
1.代码审计

2.前面的代码没有用,主要看后面的代码
-
$_SERVE[‘PHP_SELF’] 读取的是当前执行脚本的文件名,意思就是读取文件夹下的一个文件
-
$_SERVER[‘REQUEST_URI’]是取得当前URL的 路径地址
-
basename()函数返回路径中的文件名部分
语法:basename(path,suffix)
path 必须,路径
suffix 可选,文件扩展名,如果文件有就不会显示扩展名

3.解题

highlight_file可以起到文件读取的作用,而我们第一行代码就有个utils.php的文件包含,所以大胆猜测flag就在这个文件中。
所以接下来我们有两件事情要做,一件事绕过正则是使show_source不为空,另一件事是使basename(
所以我们要想办法绕/utils.php/*$/i 以及/show_source/这个正则匹配,
只要在后面加个非ASCII码的东西就可以绕过。
所以我们用%88或者只要是可以造成乱码的url编码就可以绕过**/utils.php/*$/i** 正则匹配。
/show_source/用show[source或者show.source绕过,这个记住即可。
paload:
/index.php/utils.php/%88?show[source=1

总结
-
文件包含
-
正则绕过
-
$_SERVE[‘PHP_SELF’] 读取的是当前执行脚本的文件名,意思就是读取文件夹下的一个文件
-
$_SERVER[‘REQUEST_URI’]是取得当前URL的 路径地址
-
basename()函数返回路径中的文件名部分
语法:basename(path,suffix)
path 必须,路径
suffix 可选,文件扩展名,如果文件有就不会显示扩展名 -
/show_source/用show[source或者show.source绕过
-
我们用非ASCII码的东西如%88或者只要是可以造成乱码的url编码就可以绕过**/utils.php/*$/i** 正则匹配。