安全動(dòng)態(tài)

Upload-Lab第五關(guān):如何巧妙利用.user.ini配置文件繞過(guò)黑名單驗(yàn)證

來(lái)源:聚銘網(wǎng)絡(luò)    發(fā)布時(shí)間:2024-08-30    瀏覽次數(shù):
 
本文我們利用 .user.ini文件的特性,成功繞過(guò)了服務(wù)器的安全檢查并執(zhí)行了惡意代碼。

關(guān)卡介紹

upload-lab是一個(gè)用于練習(xí)文件上傳漏洞的演練平臺(tái)。在第五關(guān)中,我們將探索如何利用 .user.ini 文件包含漏洞來(lái)攻破這一關(guān)卡。此關(guān)卡的核心在于利用PHP的 user_ini文件特性繞過(guò)安全檢查,最終實(shí)現(xiàn)惡意代碼執(zhí)行。

以下第5關(guān)的核心代碼:

在觀察源碼后,發(fā)現(xiàn)源碼中將所有可解析的文件后綴名都明確列出,包括大小寫轉(zhuǎn)換、空格和點(diǎn)號(hào)等處理。因此,無(wú)法正常上傳PHP類文件,并且 .htaccess文件的上傳也被拒絕。然而,通過(guò)仔細(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ù)器,可以通過(guò) .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作為腳本語(yǔ)言。

2、服務(wù)器運(yùn)行在 CGI/FastCGI 模式下。

3、上傳目錄中有可執(zhí)行的PHP文件。

解法步驟

(1) 編寫 .user.ini 文件

首先,我們需要?jiǎng)?chuàng)建一個(gè) .user.ini 文件,以指示服務(wù)器在每個(gè)請(qǐng)求前包含我們的 666.jpg 文件。創(chuàng)建一個(gè)名為 .user.ini 的文件,內(nèi)容如下:

(2) 編寫惡意 PHP文件

接下來(lái) ,我們需要一個(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分鐘,再去訪問(wèn)

2、直接進(jìn)去修改php-ini配置文件

把這里的300秒(即默認(rèn)等5分鐘)改為10:

修改后保存php.ini文件并重啟服務(wù),靜心等候10秒后再進(jìn)行下一步操作。

(4) 訪問(wèn)并執(zhí)行

根據(jù)關(guān)卡5的提示,upload目錄中存在一個(gè)readme.php,如下圖所示:

提示

我通過(guò)訪問(wèn)這個(gè)readme.php文件,去觸發(fā)自己上傳的腳本文件。該請(qǐng)求將執(zhí)行 id 命令,并顯示當(dāng)前用戶詳細(xì)信息。如圖所示:

webshell執(zhí)行成功

總結(jié)

在upload-lab的第五關(guān)中,我們利用 .user.ini文件的特性,成功繞過(guò)了服務(wù)器的安全檢查并執(zhí)行了惡意代碼。這種攻擊方式主要依賴于對(duì) PHP 配置文件的理解和巧妙利用,為安全研究人員提供了一個(gè)有趣且實(shí)用的學(xué)習(xí)案例。

 
 

上一篇:關(guān)于印發(fā)《全國(guó)重點(diǎn)城市IPv6流量提升專項(xiàng)行動(dòng)工作方案》的通知

下一篇:2024年8月30日聚銘安全速遞