可执行的PHP
直接执行 PHP 代码(最高风险)
-
eval()
把字符串当作 PHP 代码执行。
-
assert()(PHP < 7.2)
字符串模式下会当 PHP 执行。
-
preg_replace(‘/e’)(已废弃)
/e修饰符会把替换内容当 PHP 执行。 -
create_function()(已废弃)
用字符串创建匿名函数,本质 eval。
-
runkit_function_add() / redefine() /Runkit 系列(PECL 扩展)
通过字符串动态创建或修改函数,会执行代码。
执行系统命令
-
system() -
exec() -
shell_exec() -
passthru() -
(反引号执行) -
popen()/proc_open() -
pcntl_exec()
文件包含导致 PHP 执行
以下属于文件包含导致代码执行(LFI/RFI):
- include()
- include_once()
- require()
- require_once()
通过反序列化触发代码执行(POP 链)
- unserialize()
本身不会执行代码,但如果对象内有:
__destruct
__wakeup
__call
__callStatic
__toString
就可能触发代码执行链(典型 GDPR/CTF/RCE 漏洞)。
一些不直接执行代码,但可构建为 RCE 的函数
这些函数本身不执行 PHP,但常被用于“文件写入 → 再 include”链:
- file_put_contents()
- fwrite()
- move_uploaded_file()
配合 include 就能形成 RCE。