[Zer0pts2020]Can you guess it?
[Zer0pts2020]Can you guess it?
考点
$_SERVER['PHP_SELF']
表示当前执行脚本的文件名basename()
函数返回路径中的文件名部分basename()
函数缺陷,它会去掉文件名开头的非ASCII值
wp
返回包给了PHP版本为7.3,Source给了源码
$_SERVER['PHP_SELF']
表示当前执行脚本的文件名,basename()
函数返回路径中的文件名部分
例如访问 http://127.0.0.1/basenametest/basenametest.php
,$_SERVER['PHP_SELF']
为 /basenametest/basenametest.php
,basename($_SERVER['PHP_SELF'])
为 basenametest.php
访问 http://127.0.0.1/basenametest/basenametest.php/x/?a=1&b=2
,$_SERVER['PHP_SELF']
为 /basenametest/basenametest.php/x/
,basename($_SERVER['PHP_SELF'])
为 x
这就不难想到,可以使用/index.php/config.php/
实现读取config.php
但是源码的正则匹配是匹配尾部的,即尾部不能出现config.php
或者config.php/
但是basename()
函数有一个问题,它会去掉文件名开头的非ASCII值,例如var_dump(basename("config.php/\xff"));
和var_dump(basename("\xffconfig.php"));
结果为:config.php
本题的payload也就很容易写出:
http://url/index.php/config.php/%ff?source
最后更新于