这一题纯属就是障眼法,和我们的随机数毫无关系
![利用basename()夸目录读文件特性[Zer0pts2020]Can you guess it? - 图1](/uploads/projects/u390550@fftlfh/534762c2be1e59b9dbb419917cb83d38.png)
绕过guess是不可能的,hash_equals也是很安全的hash比较函数。只能从$_SERVER['PHP_SELF']下手。此时想要读config.php,你就会发现正则是个很棘手的问题。
但是其实仔细看可以发现这里有蹊跷:
![利用basename()夸目录读文件特性[Zer0pts2020]Can you guess it? - 图2](/uploads/projects/u390550@fftlfh/7ec6ea92df0ed624624de32073e4ae1a.png)
正则ban掉了config.php。然后会highlight_file():
![利用basename()夸目录读文件特性[Zer0pts2020]Can you guess it? - 图3](/uploads/projects/u390550@fftlfh/0d113ca50ee7927bbf42dc89d4597303.png)
可以发现这里加上了basename(),可能是为了夸目录读文件,而问题正好出在了这里,演示:
![利用basename()夸目录读文件特性[Zer0pts2020]Can you guess it? - 图4](/uploads/projects/u390550@fftlfh/ce8ac3f973af9c247b32c5d897080b53.png)
当我访问zz.php时,我可以在后面加上一些东西,比如/test.php/config.php,这样仍然访问的是test.php,但经过basename()后,传进highlight_file()函数的文件名变成了12.php,如果能够绕过那个正则,就可以得到config.php源码了,而题目告诉FLAG就在config.php里,这道题就昨晚了。所以说。爱国随机数就是个障眼法。
可以发现,这个正则匹配了config.php/为$_SERVER[‘PHP_SELF’]的结尾
![利用basename()夸目录读文件特性[Zer0pts2020]Can you guess it? - 图5](/uploads/projects/u390550@fftlfh/039b5250cf8cf49d76656a6aa9c37022.png)
老套路了,可以用%0d之类的来污染绕过,这样任然访问得到index.php:
/index.php/config.php/%0d 然后尝试在后面加上?source但是却失败了。这里绕过正则主要是通过后面填充一些东西来绕过正则中的<font style="color:#000000;">$</font>,于是写了个脚本跑一下看看什么东西能成功:
<font style="color:#000000;background-color:#FADB14;">import</font><font style="color:#000000;background-color:#FADB14;"> requests</font>
