本文我們利用 .user.ini文件的特性,成功繞過了服務(wù)器的安全檢查并執(zhí)行了惡意代碼。
關(guān)卡介紹
upload-lab是一個(gè)用于練習(xí)文件上傳漏洞的演練平臺(tái)。在第五關(guān)中,我們將探索如何利用 .user.ini 文件包含漏洞來攻破這一關(guān)卡。此關(guān)卡的核心在于利用PHP的 user_ini文件特性繞過安全檢查,最終實(shí)現(xiàn)惡意代碼執(zhí)行。
以下第5關(guān)的核心代碼:
在觀察源碼后,發(fā)現(xiàn)源碼中將所有可解析的文件后綴名都明確列出,包括大小寫轉(zhuǎn)換、空格和點(diǎn)號(hào)等處理。因此,無法正常上傳PHP類文件,并且 .htaccess文件的上傳也被拒絕。然而,通過仔細(xì)檢查,發(fā)現(xiàn)有兩個(gè)后綴名沒有被限制,它們是 .php7和 .ini。
關(guān)于user.ini
從 PHP 5.3.0 開始,PHP 支持每個(gè)目錄使用 .user.ini 文件,這類似于 Apache 的 .htaccess 文件。這種文件只會(huì)被 CGI/FastCGI 模式的 PHP 處理,因此 PECL 的 htscanner 擴(kuò)展就不再需要了。如果你使用 Apache 服務(wù)器,可以通過 .htaccess 文件實(shí)現(xiàn)相同的效果。
除了主配置文件 php.ini 之外,PHP 還會(huì)在每個(gè)目錄中查找 .user.ini 文件,從執(zhí)行的 PHP 文件所在目錄一直向上查找,直到找到 web 根目錄(由 $_SERVER['DOCUMENT_ROOT'] 指定)。如果 PHP 文件在 web 根目錄之外,只會(huì)掃描該目錄。
在 .user.ini 文件中,只能使用具有 PHP_INI_PERDIR和PHP_INI_USER 模式的配置指令。
有兩個(gè)新的配置指令控制 .user.ini 文件的使用:
1、user_ini.filename:設(shè)置 PHP 在每個(gè)目錄中查找的文件名。如果設(shè)置為空字符串,PHP 就不會(huì)查找這些文件。默認(rèn)值是 .user.ini。
2、user_ini.cache_ttl:控制重新讀取 .user.ini 文件的時(shí)間間隔。默認(rèn)是 300 秒(5 分鐘)。
.user.ini 文件中的配置會(huì)像 php.ini 中的配置一樣被 PHP 處理,這可能會(huì)導(dǎo)致文件解析漏洞。要觸發(fā) .user.ini 解析漏洞,需要滿足以下三個(gè)條件:
1、服務(wù)器使用PHP作為腳本語言。
2、服務(wù)器運(yùn)行在 CGI/FastCGI 模式下。
3、上傳目錄中有可執(zhí)行的PHP文件。
解法步驟
(1) 編寫 .user.ini 文件
首先,我們需要?jiǎng)?chuàng)建一個(gè) .user.ini 文件,以指示服務(wù)器在每個(gè)請求前包含我們的 666.jpg 文件。創(chuàng)建一個(gè)名為 .user.ini 的文件,內(nèi)容如下:
(2) 編寫惡意 PHP文件
接下來 ,我們需要一個(gè)包含惡意代碼的PHP文件。這個(gè)文件將在 .user.ini 被解析后自動(dòng)被包含并執(zhí)行。創(chuàng)建一個(gè)名為 666.jpg 的文件,內(nèi)容如下 :
(3) 上傳文件
先將 .user.ini 文件上傳到服務(wù)器,接著,再將666.jpg上傳到服務(wù)器。
user_ini文件受到user_ini.cache_ttl這個(gè)參數(shù)影響,這里有兩個(gè)選擇:
1、慢慢的等候5分鐘,再去訪問
2、直接進(jìn)去修改php-ini配置文件
把這里的300秒(即默認(rèn)等5分鐘)改為10:
修改后保存php.ini文件并重啟服務(wù),靜心等候10秒后再進(jìn)行下一步操作。
(4) 訪問并執(zhí)行
根據(jù)關(guān)卡5的提示,upload目錄中存在一個(gè)readme.php,如下圖所示:
提示
我通過訪問這個(gè)readme.php文件,去觸發(fā)自己上傳的腳本文件。該請求將執(zhí)行 id 命令,并顯示當(dāng)前用戶詳細(xì)信息。如圖所示:
webshell執(zhí)行成功
總結(jié)
在upload-lab的第五關(guān)中,我們利用 .user.ini文件的特性,成功繞過了服務(wù)器的安全檢查并執(zhí)行了惡意代碼。這種攻擊方式主要依賴于對 PHP 配置文件的理解和巧妙利用,為安全研究人員提供了一個(gè)有趣且實(shí)用的學(xué)習(xí)案例。