危险函数

❑system():输出并返回最后一行Shell结果。
**❑passthru()**:只调用命令,把命令的运行结果原样地直接输出到标准
输出设备上。它和system()函数都可以获得命令执行的状态码。
**❑exec()**:不输出结果,只返回最后一行Shell结果,所有结果可以保存
到一个返回的数组里面。
❑popen():打开一个进程管道来执行给定的命令,返回一个文件句柄。由于返回的是一个文件句柄,因此可以对它进行读和写。在PHP3中,对这种句柄只能做单一的操作,要么写,要么读;从PHP4开始,可以对其同时进行读和写。除非这个句柄是以一种模式(读或写)打
开的,否则必须调用pclose()函数来关闭它。
**❑proc_open()**:执行一个命令,并且打开用于输入/输出的文件指针。
❑move_uploaded_file():将上传的文件移动到新位置。
**❑eval()**:把字符串作为PHP代码执行。
**❑copy()**:拷贝文件。
**❑shell_exec()**:通过shell环境执行命令,并且以字符串的方式返回完整
的输出。
❑assert($assertion [, string $description]):检查一个断言是否为FALSE。如果assertion是字符串,它将被assert()当作PHP代码来执行

![](C:\Users\21649\Pictures\Screenshots\屏幕截图 2024-12-26 191528.png)

上面的是LINUX平台常用命令的执行格式。

无参数RCE

实际上就是通过调用函数得到想要的字符指令的过程

❑$_POST
❑$_GET
❑$_FILES
❑$_ENV
❑$_cookie
❑$_session

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
highlight_file(__FILE__);
$code = $_GET['code'];
if(!empty('code'))
{
if (';' === preg_replace('/[\/\*W\s]+/','', $code)) ;//使用函数尝试从变量中移除所有的换行符,空格,制表符,和/*。如果最后的结果是;,则进行内部条件块
{
eval($code);
}
else{
echo "no,wayyyyy!!!!"
}
}
else{
echo "no ,wayy!!!"
}
?>

1.getallheaders()和apache_request_headers()

getallheaders()是Apache中间件函数,可以用来获取HTTP请求头部
(header)中的所有变量信息(例如User-Agent)。
apache_request_headers()是getallheaders()的别名函数,二者的效果一致。我们可以在header中增加一些自定义的字段,同时在字段值部分指定想要执行的指令。例如,test:system(ls)表示在header中增加了test
字段,其值为system(ls)。此时,如果执行getallheaders(),则可以得到一个包含test字段和其值的结果。我们可以将该自定义字段添加在特定位置(例如header的头部或尾部),然后执行指令。将自定义字段添
加到特定位置是为了方便通过其他函数进行调取。例如,我们如果将test添加在header的尾部,那么就可以使用**end()函数直接获取test的值;
如果将test添加在header的首部,就可以使用
pos()**函数获取test的值。

2.get_defined_vars()

该函数属于通用函数,可以用于回显所有的变量信息

主要包括

❑$_GET
❑$_POST
❑$_FILES
❑$_cookie