本文目录导读:

- 第一部分:Nessus 针对 PHP 项目的配置与扫描
- 第二部分:PHP 项目自身的代码审计(Nessus 做不到的部分)
- 第三部分:综合实施方案(推荐流程)
- 第四部分:Nessus 扫描结果解读(针对PHP)
- 总结对比
针对PHP项目的漏洞扫描与Nessus的结合使用,通常涉及两个不同的层面:静态/动态代码分析(针对PHP代码本身)和网络安全扫描(针对运行环境)。
Nessus作为一款网络/主机漏洞扫描器,主要关注运行时环境(如Web服务器、PHP版本、中间件配置)的漏洞,而不是直接扫描PHP源代码的逻辑漏洞(如SQL注入、XSS)。
以下是一套完整的实战指南,涵盖如何将Nessus用于PHP项目环境扫描,以及如何补充针对PHP代码自身的扫描。
第一部分:Nessus 针对 PHP 项目的配置与扫描
Nessus 主要扫描的是部署PHP应用的服务器,而非代码仓库,你需要配置一个针对Web应用的扫描策略。
选择合适的扫描模板
- Web Application Tests(强烈推荐):会进行爬虫、表单提交、参数fuzz,能发现常见的Web漏洞(XSS、SQL注入、命令执行等),但深度有限。
- Basic Network Scan(基础):仅检测服务器版本、开放端口、已知CVE。
- Advanced Scan(进阶):可自定义插件(如启用“PHP Configuration”相关插件)。
关键扫描设置
在Nessus扫描策略中,请确保启用以下插件组:
- Web Servers:检查Apache/Nginx/Caddy版本,检测目录遍历、默认文件。
- PHP:检测PHP版本(如
CVE-2024-XXXX针对旧版PHP)、配置错误(如allow_url_fopen开启、display_errors开启)。 - CGI Abuse:检查PHP-CGI远程代码执行漏洞(如
CVE-2012-1823,CVE-2024-8925)。 - Database:如果PHP连接MySQL/PostgreSQL,检查默认端口暴露或弱口令。
配置认证扫描(提升深度)
Nessus 支持登录到PHP应用后台进行扫描(如WordPress、Drupal或自定义CMS)。
- 方式:使用HTTP表单认证,提供登录URL、用户名、密码字段。
- 作用:扫描到仅登录后才能发现的漏洞(如管理员面板SQL注入、文件上传绕过)。
常见PHP相关漏洞(Nessus能发现的)
| 漏洞类型 | Nessus 检测方式 | 示例CVE |
|---|---|---|
| PHP版本过旧 | Banner抓取+版本比对 | CVE-2024-8929 (PHP < 8.1.28) |
| PHP-FPM 配置错误 | 扫描 /status, /ping 页面 |
信息泄露、SSRF风险 |
phpinfo() 暴露 |
检测 /info.php 是否存在 |
信息泄露 |
| 文件包含(LFI/RFI) | 基于已知路径参数fuzz | 需Web应用扫描模板 |
| 命令注入(CVE-2024-4577) | 检测特定PHP-CGI请求模式 | 影响Windows + PHP 8.1/8.2 |
| .user.ini 绕过 | 检查配置文件泄露 | 常见于共享主机配置 |
实战命令:使用Nessus API启动扫描
# 创建扫描策略(先保存ID)
curl -k -H "X-ApiKeys: accessKey=xxx; secretKey=yyy" \
-X POST "https://nessus-server:8834/policies" \
-d '{"uuid":"ad629e16-03b6-8c1d-cef6-ef8c9dd3c658","settings":{"name":"PHP_Scan"}}'
# 启动扫描
curl -k -H "X-ApiKeys: accessKey=xxx; secretKey=yyy" \
-X POST "https://nessus-server:8834/scans" \
-d '{"uuid":"ad629e16-03b6-8c1d-cef6-ef8c9dd3c658","settings":{"name":"My_PHP_App","text_targets":"192.168.1.100"}}'
第二部分:PHP 项目自身的代码审计(Nessus 做不到的部分)
Nessus 不能扫描PHP源代码中的逻辑漏洞(如自己写的 SELECT * FROM users WHERE id = $_GET['id']),你需要结合以下工具:
静态分析(SAST)工具
| 工具 | 特点 | 使用方法 |
|---|---|---|
| RIPS | 专为PHP设计,检测SQLi/XSS/命令执行 | 商业版/免费版(旧版) |
| Psalm | 支持PHP 7-8,类型推断+安全检测 | vendor/bin/psalm --taint-analysis |
| PHPStan | 渐进式分析,支持自定义规则 | 需 phpstan/phpstan 包 |
| Progpilot | 开源,可集成到CI/CD | 扫描整个目录 |
| Semgrep | 通用规则引擎,可自定义PHP规则 | semgrep --config=p/php |
示例:使用 Semgrep 检测SQL注入
rules:
- id: php-sqli
patterns:
- pattern: |
$query = "... $SQL_PARAM ...";
- pattern-not: |
$stmt = $db->prepare("...");
- metavariable-regex:
metavariable: $SQL_PARAM
regex: ".*\$_(GET|POST|REQUEST).*"
message: "用户输入直接拼接SQL查询"
languages: [php]
severity: WARNING
运行:semgrep --config=rules.yaml .
动态分析(DAST)工具
- Burp Suite Pro:手动抓包,修改参数测试SQLi/XSS(需结合插件
PHP Input Validator)。 - OWASP ZAP:免费,自动爬取PHP页面,发送fuzz payload。
- SQLMap:专门检测SQL注入,需配合
--data参数。
依赖库漏洞检查
使用 composer 自带的审计功能:
composer audit # 直接检查composer.lock中已知漏洞 # 输出实例:Package "phpmailer/phpmailer" (v6.5.0) has a known CVE-2023-XXXX
第三部分:综合实施方案(推荐流程)
-
CI/CD阶段:
composer audit→ 阻止有漏洞依赖的包。semgrep / psalm --taint-analysis→ 发现代码逻辑漏洞。- 若失败,阻止合并/部署。
-
预发布/测试环境:
- 部署PHP项目到测试服务器。
- 运行Nessus Web Application Scan,检查运行时环境(PHP版本、Web服务器配置、密码策略)。
- 运行OWASP ZAP自动化扫描,补充Nessus未覆盖的Web逻辑。
-
生产环境:
- 每周运行一次Nessus 认证扫描(用测试账号登录后台)。
- 监控
php-error.log与access.log,配合Nessus的异常检测插件。
第四部分:Nessus 扫描结果解读(针对PHP)
Nessus报告中的关键字段:
- Plugin ID:如
79265(PHP版本检测)、10256(phpinfo()暴漏)。 - CVSS Score:重点关注 ≥ 7.0 的(如CVE-2024-4577为9.8)。
- Solution:通常建议升级PHP、关闭
allow_url_fopen、移除info.php。
实操建议:不要盲目信任Nessus的所有Web结果,由于Nessus是通用扫描器,某些告警可能是误报(如针对未认证页面的SQL注入探测),需结合人工验证。
总结对比
| 维度 | Nessus | PHP专用工具 |
|---|---|---|
| 检测范围 | PHP版本、Web服务器、中间件配置 | 源代码审计、SQLi/XSS逻辑 |
| 检测方式 | 网络扫描+插件匹配CVE | AST分析或动态payload注入 |
| 误报率 | 中(版本匹配可能偏差) | 低(规则精准)或高(模糊匹配) |
| 推荐配合 | 认证扫描 + 自定义策略 | Psalm/Progpilot + OWASP ZAP |
最终建议:
- 使用 Nessus + Semgrep + Composer Audit 组合覆盖 80% 的漏洞。
- 对于核心业务逻辑(如支付、用户认证),仍需要人工代码审查(Nessus和SAST工具均无法完全替代)。