无参rce
1、getallheaders()
getallheaders()
返回所有的HTTP头信息,但是要注意的一点是这个函数返回的是一个数组,而eval()
要求的参数是一个字符串,所以这里不能直接用,这时我们就要想办法将数组转换为字符串。正好implode()
这个函数就能胜任。
implode()
能够直接将getallheaders()
返回的数组转化为字符串。
可以看到获取到的头信息被当作字符串输出了,且是从最后开始输出(由于php版本不同,输出顺序也可能不同),那么我们就可以在最后随意添加一个头,插入我们的恶意代码并将后面的内容注释掉。
|
|
2、get_defined_vars()
该函数的作用是获取所有的已定义变量,返回值也是数组。不过这个函数返回的是一个二维数组,所以不能与implode
结合起来用。要用var_dump()
输出
用GET传入的参数会被显示在数组中的第一位
要返回数组的第一个值要用current()
函数可以返回数组中的单元且初始指针指向数组的第一个单元。因为GET方式传入的参数存在该二维数组中的第一个一维数组,所以我们可以通过这个函数将其取出来
|
|
如果我们传值是这样:
|
|
后面传入的shell=phpinfo();
出现在了第一个数组的最后。
end()
函数可以倒序,也就是说我们可以将命令写到后面的参数再调用函数,执行shell命令
|
|
3、session_id()
session_id()
可以用来获取/设置当前会话 ID。
那么可以用这个函数来获取cookie中的phpsessionid
了,并且这个值我们是可控的
文件会话管理器仅允许会话 ID 中使用以下字符:a-z A-Z 0-9 ,(逗号)和 - (减号)
解决方法:将参数转化为16进制传进去,之后再用hex2bin()函数转换回来就可以了。
|
|
执行的命令bp写入16进制解析
|
|
|
|