ubuntu php.ini 配置文件,.user.ini配置文件在渗透中的利用

前言:

官方介绍:

自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果

除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。

首先我们知道,php.ini是php的核心配置文件,在 PHP 启动时被读取。按照如上所说,那么web目录的其他ini文件也是可以被php识别,那么我们是不是可以通过配置.user.ini文件重新进行配置的修改呢?

c2ed6b05c964

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

在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置可被识别

c2ed6b05c964

c2ed6b05c964

综上,我们可以了解到:

1、.user.ini实际上就是一个可以由用户自定义的php.ini,我们能够自定义的设置是模式为 PHP_INI_PERDIR 或者 PHP_INI_USER的设置。实际上,除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通过.user.ini来设置的。

2、.user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。

我们可以发现稍微敏感的配置项,都是PHP_INI_SYSTEM模式的(甚至是php.ini only的),包括disable_functions、extension_dir、enable_dl等,但是还是有可以利用的地方的

c2ed6b05c964

可以通过.user.ini绕过open_basedir的限制,还有其他的一些绕过手法就不多介绍了,下面的这篇文章介绍得很详细:

浅谈几种Bypass open_basedir的方法

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

利用条件:open_basedir没有被限制

利用函数:auto_append_file、auto_prepend_file

利用原理:借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell

c2ed6b05c964

auto_prepend_file 表示在加载第一个PHP代码之前先行预加载该配置所指示的PHP文件。

auto_append_file 表示在加载第一个PHP代码之后执行预加载该配置所指示的PHP文件。

利用过程:

1、我们先构建一个图片马,并上传到服务器:

c2ed6b05c964

2、上传.user.ini到目标服务器,文件内容编辑为:

c2ed6b05c964

3、找到目标服务器存在的任意php可正常访问的文件

这里我们以echo.php作为测试:

c2ed6b05c964

4、构造url并进行访问,成功输出phpinfo:

c2ed6b05c964

原文件的内容输出在最后,auto_append_file函数则相反:

c2ed6b05c964

利用背景:

假设某网站限制不允许上传.php文件,但是可以上传一个.user.ini,再上传一个图片马,包含起来进行getshell。不过前提是含有.user.ini的文件夹下需要有正常的php文件。

user.ini在实际中的应用很广,它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法

利用.user.ini绕过open_basedir(失败):

由于Windows使用phpstudy复现失败,这里我们搭建环境:

Kali + nginx + php7.4-fpm

具体搭建过程请参考:

Ubuntu16.0.4.1安装lnmp

Linux/Ubuntu16.04+Nginx+Mysql+PHP 搭建wordpress

搭建环境往往都是悲伤的故事,不提也罢。。。

搭建完以后启动相应服务:

/etc/init.d/nginx start

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

c2ed6b05c964

php.ini限制open_basedir

c2ed6b05c964

此时无法读取/var/目录下的文件

c2ed6b05c964

上传.user.ini,编辑内容如下:

open_basedir=:\

复现失败了,似乎这个思路不行,它会根据php.ini设置的open_basedir为主

end

php我了解得很少,可能还有其他函数可以被利用的,以后发现了再说

参考如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值