在滲透測試中,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()
頁面輸出,是攻防兩端都必須具備的一項核心能力。