WhatWeb 不能直接识别 PHP 版本,仅能通过 X-Powered-By 响应头、PHPSESSID Cookie 或页面特征间接推测;生产环境常禁用版本标识,故结果多为“存在 PHP”而非具体版本。

WhatWeb 能直接识别 PHP 版本吗?
不能。WhatWeb 本身不解析 PHP 脚本,也不主动探测服务器端 PHP 版本;它只能通过 HTTP 响应头(如 X-Powered-By)、meta 标签、页面特征或已知 CMS 指纹间接推测。很多生产环境会禁用 X-Powered-By,此时 WhatWeb 返回的 PHP 插件结果往往是“存在 PHP”,而非具体版本。
实操建议:
- 先运行
whatweb -v http://target.com查看详细指纹输出,重点找X-Powered-By: PHP/8.1.2或类似字段 - 若无版本号,检查响应中是否含
Set-Cookie的PHPSESSID—— 这只说明后端用了 PHP,不指明版本 - WhatWeb 的
--user-agent和--follow-redirect可能影响识别率,建议加上
真正靠谱的 PHP 版本探测方式有哪些?
依赖 WhatWeb 单一工具容易漏判。实际渗透中需组合验证:
- 用
curl -I http://target.com手动抓响应头,比 WhatWeb 更直观,也避免插件误报 - 访问常见 PHP 调试/信息泄露路径:
/phpinfo.php、/info.php、/test.php?x=phpinfo()(注意 URL 编码) - 对支持错误回显的站点,尝试触发 PHP 解析错误(如请求
/index.php/.jpg),部分旧版 Apache+PHP 会暴露版本 - 结合
nikto -h http://target.com或gau | grep -i "php\|info\|version"辅助发现敏感路径
拿到 PHP 版本后,怎么快速匹配已知漏洞?
版本只是起点,关键在关联 CVE 和可利用场景。别直接搜“PHP 8.1.10 漏洞”,要聚焦组件和上下文:
立即学习“PHP免费学习笔记(深入)”;
- 查官方变更日志:
https://www.php.net/ChangeLog-8.php,重点关注 Security Fixes 条目 - 用
searchsploit php 8.1.10(需先searchsploit -u更新)—— 注意筛选真实可利用项,很多是 PoC 或过时绕过 - 若目标用 Apache + mod_php,关注 CVE-2023-48975 这类解析逻辑缺陷;若用 Nginx + php-fpm,则重点看 CVE-2019-11043(fpm 配置不当导致 RCE)
- 别忽略扩展:
php -m列出的扩展(如gd、exif)也有独立 CVE,searchsploit gd可能比搜 PHP 主版本更有效
Why does whatweb sometimes say “PHP” but you find no .php files?
因为 WhatWeb 的 PHP 插件匹配的是服务端行为特征(比如响应中含 PHPSESSID cookie、text/html; charset=UTF-8 + 特定 HTML 注释等),不代表目录下必须有可见的 .php 后缀文件。现代框架常通过路由重写隐藏真实扩展名(如 Laravel 的 index.php/xxx 或 Nginx 的 try_files 规则)。
这时要:
- 用
ffuf -w /path/to/wordlist -u http://target.com/FUZZ -t 50 -e ".php,.php3,.phtml,.php5"暴力扩展名 - 检查
robots.txt、.git/config、backup/等路径,常藏有原始 PHP 文件备份 - 留意 JS 中硬编码的 API 路径,比如
/api/v1/user.php?id=1—— 即使主站没暴露 .php,子接口可能还在用
PHP 7.4.x 这种模糊结果时,别急着套 CVE,先确认是不是真正在运行这个版本,以及它跑在什么 SAPI 模式、什么 Web 服务器上。











