渗透测试中 phpinfo() 的信息利用分析
在渗透测试中,phpinfo()
是一个非常常见却极具价值的信息泄露点。这个函数的本意是向开发者展示当前 PHP 环境的详细配置情况,包括编译选项、扩展模块、环境变量、系统信息、目录路径等。然而一旦该页面被暴露到互联网上,攻击者便可以借此收集大量目标系统的重要信息,从而为后续的漏洞利用、权限提升、提权横向等行为打下基础。
本文将从实战角度分析 phpinfo()
页面中各类信息的渗透利用方式。
一、系统与服务器环境信息
在 phpinfo()
输出的顶部,可以看到如下关键字段:
字段 | 示例值 | 利用意义 |
---|---|---|
System | Linux kali 5.10.0-kali-amd64 x86_64 | 操作系统类型、内核版本、架构信息,可用于匹配已知提权漏洞 |
Server API | Apache 2.0 Handler / FPM/FastCGI | 判断 Web 服务类型,结合特定攻击向量(如 PHP-FPM RCE) |
Build Date | Feb 10 2023 | 判断是否为老旧版本,辅助漏洞判断 |
Architecture | x86_64 | 匹配 Payload 构造、Shellcode 架构 |
这些信息可以帮助攻击者判断操作系统类型与服务器架构,以便选择合适的利用模块或提权工具。
二、PHP 版本信息
-
PHP Version:
phpinfo()
明确显示 PHP 的版本号(如7.4.3
、8.1.12
)。 -
攻击者可以据此查找该版本存在的公开漏洞(如:
CVE-2019-11043
:PHP-FPM 任意代码执行CVE-2021-21703
:路径解析问题引发信息泄露CVE-2021-32610
:反序列化漏洞
对于已知漏洞版本,攻击者可进行漏洞验证与构造 RCE 利用链。
三、已加载模块与扩展信息
phpinfo()
输出中会列出所有当前加载的扩展,如:
curl
,mbstring
,openssl
,gd
,imap
,mysqli
,pdo_mysql
,phar
,xml
,zip
等。
利用方式包括:
- Phar 支持存在时:可能通过文件包含 + phar:// 协议实现反序列化攻击。
- IMAP/POP3 扩展开启时:可构造 SSRF 请求绕过 URL 限制。
- 数据库扩展(mysqli/pdo):判断是否可连接后端数据库、暴力连接测试。
- Zip 支持开启时:辅助构造压缩包提权场景。
四、文件路径与目录布局信息
该部分通常被用于路径遍历、文件包含、上传利用、Session 劫持等攻击。常见字段如下:
字段 | 示例值 | 利用方式 |
---|---|---|
DOCUMENT_ROOT | /var/www/html | 明确网站根目录,辅助构造 LFI 路径 |
SCRIPT_FILENAME | /var/www/html/info.php | 定位当前文件实际路径,辅助构造任意文件读取 |
include_path | .::/usr/share/php | PHP 包含路径,可能在 LFI 时被利用 |
upload_tmp_dir | /tmp | 文件上传后的临时位置,上传图片马验证路径用 |
extension_dir | /usr/lib/php/20220829 | 动态扩展路径,可尝试利用 dl() 加载恶意模块 |
session.save_path | /var/lib/php/sessions | 可尝试结合 LFI + Session 注入恢复会话内容 |
open_basedir | /var/www:/tmp | 判断是否存在目录访问限制,LFI 的一个重要参考项 |
通过这些路径,攻击者可以精确定位文件系统结构,为上传、读取或包含本地文件提供关键线索。
五、禁用函数与限制项信息
phpinfo()
会显示当前禁用的函数,字段为:
disable_functions
: 如system
,exec
,shell_exec
,popen
等
攻击者可以判断当前环境中能否直接执行命令,如果函数未禁用,即使文件包含成功,也可能导致 RCE。
同时,以下配置项也对渗透测试非常关键:
配置项 | 描述 | 利用意义 |
---|---|---|
allow_url_fopen | 是否允许通过 URL 读取远程资源 | 如果开启,可尝试远程包含(RFI) |
allow_url_include | 是否允许通过 URL 包含远程 PHP 文件 | 可结合 HTTP 服务构造远程木马包含 |
enable_dl | 是否允许动态加载扩展 | 与扩展目录配合可加载恶意模块 |
display_errors | 是否输出错误信息 | 如果开启,可获得路径、变量、文件等敏感信息 |
六、HTTP 请求与网络信息
phpinfo()
还会展示当前请求的环境变量,如:
REMOTE_ADDR
:客户端 IPHTTP_USER_AGENT
:请求 UAHTTP_COOKIE
:Cookie 值HTTP_HOST
/SERVER_NAME
:域名信息
在一些测试中,这些变量值可用于验证 SSRF、Header 注入、或反代 IP 泄露等场景。
七、临时利用技巧:验证上传和路径控制
- 在黑盒测试中,可先上传一张图片马,然后访问
phpinfo()
页面,观察upload_tmp_dir
、_FILES
、_POST
等字段,确认上传是否成功。 - 某些框架会将
phpinfo()
残留在debug.php
、info.php
、test.php
、phpinfo.php
等文件中,可以结合目录扫描工具或 Google Dork 搜索语法发现。
总结
phpinfo()
本质上是一个信息收集的黄金入口,在渗透测试中可提供:
- 系统指纹识别(PHP 版本、操作系统、架构)
- 漏洞适配(根据版本选择利用模块)
- 文件系统探索(Web 根、Session 路径、上传临时目录)
- 利用路径构造(LFI、RFI、上传、反序列化)
- 函数调用分析(是否禁用了
system
、exec
)
熟练阅读并分析 phpinfo()
页面输出,是攻防两端都必须具备的一项核心能力。