[Zer0pts2020]Can you guess it?

主要是几个函数不认得
basename
random_bytes
hash_equals
一个个查一下
basename

random_bytes

这个就是随机生成字符串
hash_equals

这个就是比较两个字符串是否相等
但是后面的好像没什么用吧
因为返回的flag都不知道是什么…
所以看看之前的
if (preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF'])) {  | 
也就是说查询的网址不能有config.php
还一定要传一个source上去
所以要找一找就是这么绕过一下
在这里,就是正则匹配
if (preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF'])) {  | 
所以前者,如果在末尾加上一个没用的字符不就可以绕过了?
找到了!!!%ff
经过测试%aa到%ff都可以用,之后就不行了
这个是因为,basename函数会过滤文件开头中的非ascii值
嘻嘻,如果是%ff之后的就不是ascii码可以识别的了
所以最后的payload:
/index.php/config.php/%ff?source  | 
为什么一定前面要加index,我不太懂,有大佬可以说说不