PHPINFO 中的重要資訊
思考一下獲得了 PHPINFO 以後我們需要觀察哪些比較重要的資訊來幫助我們進一步滲透
0X01 PHPINFO 中的敏感資訊
1.PHP 版本資訊
我們知道 PHP 不同版本之間在很多方面都有著差異,當然我麼重點關注的肯定是一些函式引數以及一些安全性機制的差異。特別是 PHP5 和 PHP7 之間的差異尤其的大,因此知道了 PHP 的確切版本是我們需要做的第一步。
2.系統的版本資訊
系統無非是兩種 Linux 和 Windows ,這在我們後期命令執行的時候或者是 bypass disable_function 的時候有用
3.Configure Command(編譯命令)
這個其實就是編譯 php 的時候的命令,這裡面其實包含了幾乎所有的, php 要載入的擴充套件和功能,但是看起來不是很方便(因為比較亂),但也是一目瞭然,當然這些功能在後面都有專門的欄目介紹。
4.Loaded Configuration File(配置檔案位置)
這一欄表明了 php.ini 這個 php 配置檔案的位置,在有檔案讀取的情況下可以進行讀取,在滲透中還是很有幫助的。
5.Registered PHP Streams(支援的流)
這個在檔案包含、反序列化還有一些關鍵的 bypass 的時候非常有用
6.Registered Stream Filters(支援的流過濾器)
這個同樣在檔案包含、反序列化還有一些關鍵的 bypass 的時候非常有用
7.Core(核心)
這個欄目裡面有非常多重要的配置資訊,我們可以簡單的看一下:
(1)allow_url_fopen&allow_url_include
檔案包含必看選項之一
(2)disable_functions
命令執行、程式碼執行必看選項之一,具體可以看我的這篇文章
(3)錯誤提示
除錯過程中經常使用的錯誤提示在沒有關閉的情況下放入生產環境是不堪設想的
(4)enable_dl
該選項 預設為 on(在未來將被移除) ,我們看一下 官方手冊怎麼說的
該指令僅對 Apache 模組版本的 PHP 有效。 你可以針對每個虛擬機器或每個目錄開啟或關閉 dl() 動態載入 PHP 模組。
關閉動態載入的主要原因是為了安全。通過動態載入,有可能忽略所有 open_basedir 限制。 預設允許動態載入,除了使用 安全模式。在安全模式,總是無法使用 dl()。
(5)extension_dir
和 dl() 配合使用效果更好,具體可以看這篇文章
(6)include_path
PHP 用include()函式包函檔案時的預設路徑
(7)open_basedir
這個選項設定了檔案讀取的時候的目錄限制
(8)short_open_tag
判斷伺服器是不是支援短標籤,這在寫 shell 的時候很有幫助
8.phar
檔案包含還有反序列化重點關注
9.SESSION
session.save_path=”” –設定session的儲存路徑
session.save_handler=”” –設定使用者自定義儲存函式,如果想使用PHP內建會話儲存機制之外的可以使用本函式(資料庫等方式)
session.auto_start boolen –指定會話模組是否在請求開始時啟動一個會話,預設為0不啟動
session.serialize_handler string –定義用來序列化/反序列化的處理器名字。預設使用php
例如:
session.save_path="D:\xampp\tmp"表明所有的session檔案都是儲存在xampp/tmp下 session.save_handler=files表明session是以檔案的方式來進行儲存的 session.auto_start=0表明預設不啟動session session.serialize_handler=php表明session的預設序列話引擎使用的是php序列話引擎
這幾個選項在檔案包含的時候以及反序列化的時候非常的有用,具體可以參考一下LCTF2018 的一道題 以及我之前的這篇文章
10.PHP Variables
(1)_SERVER[‘PATH’]
這個是 windows 下特有的,能顯示出系統的所有環境變數
(2)_SERVER[“SCRIPT_FILENAME”]
這個是最常用,也是最有效的一個辦法,找到phpinfo()頁面可以直接找到網站的絕對路徑,對於寫shell和資訊蒐集是必不可少的。
(3)_SERVER[“SERVER_ADDR”]
顯示該網站的真實的 ip 地址,有時候通過phpinfo()洩漏的ip可以查查旁站、c段什麼的,直接無視cdn。
(4)_FILES[“filename”]
在給PHP傳送POST資料包時,如果資料包裡包含檔案區塊,無論你訪問的程式碼中有沒有處理檔案上傳的邏輯,PHP都會將這個檔案儲存成一個臨時檔案(通常是/tmp/php[6個隨機字元]),檔名可以在$_FILES變數中找到。這個臨時檔案,在請求結束後就會被刪除。
這是常用的配合檔案包含 get,shell 的方式,具體可見這篇文章
11.gopher
可以配合 SSRF 發起攻擊
12.fastcgi
檢視是否開啟fastcgi和fastcgi的版本,可能導致解析漏洞、遠端命令執行、任意檔案讀取等問題
13.支援的程式
可以通過phpinfo()檢視一些特殊的程式服務,比如redis、memcache、mysql、SMTP、curl等等如果伺服器裝了redis或者memcache可以通過ssrf來getshell了,在discuz中都出現過此類問題。如果確定裝了redis或memcache的話,在沒有思路的情況下,可以著重找一下ssrf
0X02 PHPINFO 中要解釋的資訊
1.Thread Safety
這個資訊有點意思,我們一般看到的都是 disable ,但是這不代表不安全,因此這個選項嚴格的講並不叫“執行緒安全”,應該叫 “執行緒安全檢查”。
None Thread Safe就是非執行緒安全,在執行時不進行執行緒(thread)安全檢查。 Thread Safe就是執行緒安全,執行時會進行執行緒(thread)安全檢查,以防止有新要求就啟動新執行緒,耗盡系統資源。
再看看這兩者的選擇。
為了與外部交換資料,PHP提供了一種叫SAPI的介面。
SAPI是一箇中間過程,提供了一個和外部通訊的介面,有點類似於socket。
SAPI使得PHP可以和其他應用進行互動資料(如Apache、Nginx等)。
PHP預設提供了很多種SAPI,常見的提供給Apache、Nginx、IIS6/7的FastCGI,單獨給IIS的ISAPI,以及Shell的CLI。
FastCGI執行方式是以單一執行緒來執行操作,所以不需要進行執行緒的安全檢查,除去執行緒安全檢查的防護反而可以提高執行效率。
而執行緒安全檢查是為ISAPI方式的PHP準備的,也就是為IIS準備的,因為有許多php模組都不是執行緒安全的,所以需要使用Thread Safe的PHP。
所以,如果是以 FastCGI 執行 PHP ,都建議用Non Thread Safe的 PHP (zip安裝包)。
2.expose_php
這個選項開啟將會在 http 包的頭部顯示 php 的版本等資訊,是一種資訊洩露,建議關閉
0X03 總結
簡單翻了一下 phpinfo 花了一點時間整理,為了以後方便吧~