PHP 7.3 本身不直接导致上传漏洞,根源在于应用层不安全实现,如未校验 MIME 类型、依赖前端限制、黑名单过滤宽松、未重命名或未隔离存储;自动化扫描应聚焦含上传逻辑的 PHP 脚本及其调用链,结合 SAST、DAST 与配置检查分层检测,并定制脚本验证绕过与执行能力。

PHP 7.3 本身不直接产生上传漏洞,漏洞根源在于应用层对文件上传功能的不安全实现——比如未校验类型、依赖前端限制、黑名单过滤宽松、未重命名或未隔离存储等。自动化扫描检测的目标,是识别这些编码缺陷和配置风险,而非扫描 PHP 版本本身。
明确扫描对象:聚焦上传逻辑与上下文
不要只扫“PHP 7.3”,要扫含上传功能的 PHP 脚本(如 upload.php、file_handler.php)及其调用链。重点关注:
- 是否使用
$_FILES且未做fileinfoMIME 验证 - 是否仅靠
pathinfo($filename, PATHINFO_EXTENSION)提取后缀并做黑名单判断 - 是否允许用户控制文件名或保存路径(如拼接
$_POST['name']) - 是否将文件存放在 Web 可访问目录(如
/uploads/)且无.htaccess执行限制
组合工具链实现有效自动化
单一工具无法覆盖上传漏洞全场景,需分层协同:
-
静态扫描(SAST):用
PHPStan或RIPS检测危险函数调用模式,例如匹配move_uploaded_file($_FILES[...])后是否缺失finfo_open()或白名单校验 -
动态探测(DAST):用
ffuf或Arjun发现上传入口点(如/api/upload、/admin/file.php),再配合curl自动化尝试冷门后缀(.pht、.php3、.phps)+ 绕过载荷(shell.php.、shell.php%00.jpg) -
配置检查:解析目标服务器响应头与错误页,确认是否启用
display_errors=On(可能泄露路径)、file_uploads=On(是否允许上传)、open_basedir是否生效
定制化检测脚本关键逻辑
写一个轻量 Python 脚本串联核心检测点,例如:
- 向上传接口发请求,附带
Content-Type: image/jpeg+ 文件内容为<?php @eval($_POST[1]);?> - 尝试 5 种绕过组合:大小写后缀(
.PhP)、双扩展(shell.jpg.php)、空格截断(shell.php[space])、::$DATA(IIS)、.php3(Apache) - 上传后立即 GET 访问返回的 URL,检查 HTTP 状态码(200/302)及响应体是否含
eval或执行痕迹(如phpinfo()输出) - 若成功,再尝试写入一句话木马并触发命令执行验证
规避误报与环境适配
PHP 7.3 环境下需注意:
- 禁用
register_globals(PHP 5.4+ 已移除),但需确认是否启用short_open_tag(影响=木马解析) - 某些 WAF 会拦截
eval、system等关键词,建议用变形 payload:@assert($_POST[1])或create_function动态构造 - 共享主机常禁用
exec等函数,扫描时优先验证文件写入和解析能力,而非直接执行系统命令
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











