php rce漏洞排查核心是检查用户输入是否未经过滤直接进入eval、assert、system等高危函数,需结合静态分析、正则扫描、配置审查及绕过手法验证。

查PHP远程代码执行(RCE)漏洞,核心是定位“用户输入是否被直接送入高危函数执行”。不需要等攻击发生,靠静态分析+关键点排查就能发现大部分风险。
看有没有危险函数被用户输入控制
重点扫描代码中是否出现以下函数,且其参数来自 $_GET、$_POST、$_REQUEST、$_COOKIE、$_FILES 等外部输入:
-
eval():必须警惕,参数是纯PHP代码,如
eval($_POST['code']); -
assert():PHP 7.1之前会执行字符串,如
assert($_GET['x']); -
preg_replace('/.*/e', ...):带
/e修饰符(仅限 PHP - create_function()、call_user_func()、array_map() 等动态调用类函数,若第一个或第二个参数由用户控制,也可能触发执行
- system()、exec()、shell_exec()、passthru():属于命令执行,但和RCE同属高危范畴,一并检查
查输入是否未经过滤就进执行上下文
即使用了危险函数,如果输入被严格过滤或白名单校验,风险也低。要关注:
- 有没有对输入做 类型转换(如强制转为int)、长度限制、正则白名单匹配(如只允许字母数字)
- 有没有使用 escapeshellarg() 或 escapeshellcmd() 处理命令类函数的参数
- 有没有用 htmlentities()、htmlspecialchars() 做输出编码——这防XSS,不防RCE,别混淆
用工具辅助快速扫描
人工逐行看效率低,推荐组合使用:
-
静态扫描工具:如 RIPS、phpggc、或开源的
php-security-audit,能自动识别危险函数调用链 -
正则批量搜索:在项目根目录运行命令,快速定位可疑模式:
grep -r "eval\|assert\|create_function\|shell_exec\|system(" --include="*.php" . -
配置检查:确认
php.ini中disable_functions已禁用eval, system, exec, passthru, shell_exec等(注意:仅禁用函数不能替代代码修复)
验证时注意典型绕过手法
找到疑似点后,别只试 phpinfo()。真实漏洞常需绕过简单过滤:
- 用大小写混写或插入空格绕过关键词检测:
eVAl()、as sert() - 用变量拼接:
$a="ev"."al"; $a($_POST[1]); - 用编码或反引号:
`cat /etc/passwd`、base64_decode('cGhwaW5mbygp') - 利用数组键名、JSON字段等间接传参路径,避开显式
$_GET检查
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











