.user.ini配置文件在滲透中的利用

前言:

官方介紹:

自 PHP 5.3.0 起,PHP 支持基于每個目錄的 .htaccess 風(fēng)格的 INI 文件。此類文件僅被 CGI/FastCGI SAPI 處理。此功能使得 PECL 的 htscanner 擴(kuò)展作廢。如果使用 Apache,則用 .htaccess 文件有同樣效果

除了主 php.ini 之外,PHP 還會在每個目錄下掃描 INI 文件,從被執(zhí)行的 PHP 文件所在目錄開始一直上升到 web 根目錄($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被執(zhí)行的 PHP 文件在 web 根目錄之外,則只掃描該目錄。

首先我們知道,php.ini是php的核心配置文件,在 PHP 啟動時被讀取。按照如上所說,那么web目錄的其他ini文件也是可以被php識別,那么我們是不是可以通過配置.user.ini文件重新進(jìn)行配置的修改呢?

答案是顯而易見的,并不能任意修改配置。

在 .user.ini 風(fēng)格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 設(shè)置可被識別


綜上,我們可以了解到:

1、.user.ini實際上就是一個可以由用戶自定義的php.ini,我們能夠自定義的設(shè)置是模式為 PHP_INI_PERDIR 或者 PHP_INI_USER的設(shè)置。實際上,除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通過.user.ini來設(shè)置的。

2、.user.ini是一個能被動態(tài)加載的ini文件。也就是說我修改了.user.ini后,不需要重啟服務(wù)器中間件,只需要等待user_ini.cache_ttl所設(shè)置的時間(默認(rèn)為300秒),即可被重新加載。

我們可以通過在官網(wǎng)上查看哪些配置可以在.user.ini中運(yùn)用:
https://www.php.net/manual/zh/ini.list.php

我們可以發(fā)現(xiàn)稍微敏感的配置項,都是PHP_INI_SYSTEM模式的(甚至是php.ini only的),包括disable_functions、extension_dir、enable_dl等,但是還是有可以利用的地方的

可以通過.user.ini繞過open_basedir的限制,還有其他的一些繞過手法就不多介紹了,下面的這篇文章介紹得很詳細(xì):
淺談幾種Bypass open_basedir的方法

利用.user.ini本地包含文件:

利用條件:open_basedir沒有被限制
利用函數(shù):auto_append_file、auto_prepend_file
利用原理:借助.user.ini輕松讓所有php文件都“自動”包含某個文件,而這個文件可以是一個正常php文件,也可以是一個包含一句話的webshell

auto_prepend_file 表示在加載第一個PHP代碼之前先行預(yù)加載該配置所指示的PHP文件。
auto_append_file 表示在加載第一個PHP代碼之后執(zhí)行預(yù)加載該配置所指示的PHP文件。

利用過程:
1、我們先構(gòu)建一個圖片馬,并上傳到服務(wù)器:

2、上傳.user.ini到目標(biāo)服務(wù)器,文件內(nèi)容編輯為:

3、找到目標(biāo)服務(wù)器存在的任意php可正常訪問的文件
這里我們以echo.php作為測試:

4、構(gòu)造url并進(jìn)行訪問,成功輸出phpinfo:

原文件的內(nèi)容輸出在最后,auto_append_file函數(shù)則相反:

利用背景:
假設(shè)某網(wǎng)站限制不允許上傳.php文件,但是可以上傳一個.user.ini,再上傳一個圖片馬,包含起來進(jìn)行g(shù)etshell。不過前提是含有.user.ini的文件夾下需要有正常的php文件。

user.ini在實際中的應(yīng)用很廣,它比.htaccess用的更廣,不管是nginx/apache/IIS,只要是以fastcgi運(yùn)行的php都可以用這個方法

利用.user.ini繞過open_basedir(失敗):

由于Windows使用phpstudy復(fù)現(xiàn)失敗,這里我們搭建環(huán)境:
Kali + nginx + php7.4-fpm
具體搭建過程請參考:
Ubuntu16.0.4.1安裝lnmp
Linux/Ubuntu16.04+Nginx+Mysql+PHP 搭建wordpress
搭建環(huán)境往往都是悲傷的故事,不提也罷。。。

搭建完以后啟動相應(yīng)服務(wù):

/etc/init.d/nginx start
/etc/init.d/php7.4-fpm start

php.ini限制open_basedir

此時無法讀取/var/目錄下的文件

上傳.user.ini,編輯內(nèi)容如下:

open_basedir=:\

復(fù)現(xiàn)失敗了,似乎這個思路不行,它會根據(jù)php.ini設(shè)置的open_basedir為主

end

php我了解得很少,可能還有其他函數(shù)可以被利用的,以后發(fā)現(xiàn)了再說

參考如下:


.user.ini文件
神秘的.user.ini文件
PHP 通過.user.ini 繞過黑名單限制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容