Nmap不能直接扫描PHP版本或漏洞,仅能发现Web端口、获取基础服务指纹并辅助推测PHP应用存在;需结合特定脚本(如http-php-version、http-enum)探测风险路径,并依赖人工验证响应内容与配置。

直接用 nmap 扫 PHP 服务?别白忙——它不识别 PHP 版本,也不查 PHP 漏洞
很多人以为 nmap -sV 扫出 http 或 https 就等于“扫到了 PHP”,其实不是。Nmap 默认只识别 Web 服务器(如 Apache/Nginx)、后端语言(如 PHP)是靠响应头或路径特征推测的,且极不可靠。它不会告诉你当前运行的是 PHP 7.4.33 还是 8.1.20,更不会报出 phpinfo() 泄露、unserialize() RCE 或 preg_replace() 代码执行这类漏洞点。
真正能定位 PHP 相关漏洞的,是后续的主动探测和人工验证。Nmap 的作用仅限于:发现开放的 Web 端口、获取基础服务指纹、辅助判断是否可能运行 PHP 应用。
-
nmap -p 80,443,8080 -sV --script=http-title,http-headers,http-methods可看响应头里有没有X-Powered-By: PHP/8.0.30 - 若响应头被清理,可加
--script=http-php-version(需 Nmap 7.90+,且依赖/phpinfo.php、/info.php等默认路径试探) - 别依赖
http-php-version的结果——它成功率低,且会触发 WAF 日志,容易被封
怎么让 Nmap 帮你找到 PHP 漏洞的“入口”?重点扫这些路径和行为
Nmap 本身不挖漏洞,但它的脚本可以帮你快速定位常见 PHP 风险暴露点。关键是选对脚本,而不是盲目扫全端口。
-
nmap -p 80,443 --script http-phpmyadmin-dir-traversal,http-phpself-xss,http-php-version:针对已知高危 PHP 应用路径做试探 -
nmap -p 80 --script http-enum --script-args http-enum.category=php:枚举常见 PHP 调试/信息泄露文件(如/phpinfo.php、/test.php、/info.php、/install.php) - 如果扫到
phpMyAdmin,立刻补扫:nmap -p 80 --script http-vuln-cve2012-5806,http-vuln-cve2013-3238(对应老版本 phpMyAdmin 的未授权访问和 XSS) - 注意:
http-enum默认不扫.php后缀,要加--script-args http-enum.category=php或自定义http-enum.nse的paths参数
扫出来一堆 HTTP 200 的 PHP 文件,下一步必须人工验证
Nmap 返回 /phpinfo.php → 200 OK 并不等于“漏洞确认”。很多是空文件、重定向、或返回 200 但内容为空。真实风险要靠手动请求+观察响应体。
立即学习“PHP免费学习笔记(深入)”;
- 用
curl -I http://target/phpinfo.php先看状态码和头,再用curl http://target/phpinfo.php | head -30看实际输出 - 特别留意是否含
disable_functions、allow_url_include=On、magic_quotes_gpc=Off(虽已废弃,但老环境仍有影响)等配置项 - 遇到
/index.php?file=类参数,别只信 Nmap 的http-sql-injection脚本结果——它误报率高。改用ffuf -u "http://target/index.php?file=FUZZ" -w /usr/share/wordlists/seclists/Fuzzing/LFI-LISTS.txt更准 - 如果 Nmap 报出
http-vuln-cve2018-19518(ThinkPHP 5.0.23 RCE),必须验证:发POST /index.php?s=captcha看是否返回eval()错误或直接执行命令
Kali 里 Nmap 扫 PHP 的几个硬坑,不踩就少浪费两小时
在 Kali 上跑 Nmap 扫 PHP 相关内容,最容易卡在权限、脚本更新、WAF 干扰这三块。
- 默认
nmap安装不含最新脚本:运行sudo nmap --script-updatedb再扫,否则http-php-version可能根本不存在 - 非 root 权限下
-sS(SYN 扫描)会被拒绝,而-sT(TCP connect)又容易被 WAF 记为扫描行为——建议先用sudo nmap -sS -p 80快速确认端口,再切普通用户跑--script - 遇到目标返回
HTTP 403但你知道有 PHP 文件(比如从 JS 或注释里看到main.php),别指望 Nmap 自动绕过。得自己构造 User-Agent、加 Referer、或用--data "a=1"强制 POST 触发解析 -
http-enum默认只扫前 100 个路径,遇到自定义路径(如/app/web/index.php)大概率漏掉——必须配合-v查看扫描过程,或换gobuster/ffuf补全
真正决定能不能挖到 PHP 漏洞的,从来不是 Nmap 扫出了多少行 200,而是你有没有盯着响应体里的 phpinfo() 输出、有没有在 $_GET 参数里试 php://filter、有没有对 unserialize() 的输入点做 POP 链验证。Nmap 只是帮你把门推开一条缝,后面全是手上的活。











