$_SERVER['PHP_SELF'] 表示当前 php 文件相对于网站根目录的位置地址,与 document root 相关 下面是本地测试截图,也就是http://.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']
basename() 函数会返回路径中的文件名部分 假如路径是/index.php/config.php 浏览器的解析结果都是index.php 而basename会返回config.php 就算后面跟上多余的字符也会返回文件名部分
With the default locale setting “C”, basename() drops non-ASCII-chars at the beginning of a filename.
var_dump(basename("xffconfig.php")); // => config.php var_dump(basename("config.php/xff")); // => config.php简单来说basename()函数存在一个问题,它会去掉文件名开头的非ASCII值
这道题其实很简单,知道了上面的函数了以后,代码审计以后其实最主要的部分就是正则过滤了/config.php/*$/i,我们只需要绕过它即可,道理也很简单 它是匹配尾部 因此我们只要构造xxxxx.node3.buuoj.cn/index.php/config.php/