欢迎来到梦飞科技

网络技术

当前优惠活动:

利用PHP的.user.ini设置文件建造后门

0x00 配景

这个预计许多同学看了不屑,认为是烂大街的对象了:

.htaccess文件组成的PHP后门

那么我来个新的吧:.user.ini。它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个要领。我的nginx处事器全部是fpm/fastcgi,我的IIS php5.3以上的全部用的fastcgi/cgi,我win下的apache上也用的fcgi,可谓很广,不像.htaccess有范围性。

0x01 .user.ini

那么什么是.user.ini?

这得从php.ini说起了。php.ini是php默认的设置文件,个中包罗了许多php的设置,这些设置中,又分为几种:PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USER。 在此可以查察:http://php.net/manual/zh/ini.list.php 这几种模式有什么区别?看看官方的表明:

enter image description here

个中就提到了,模式为PHP_INI_USER的设置项,可以在ini_set()函数中配置、注册表中配置,再就是.user.ini中配置。 这里就提到了.user.ini,那么这是个什么设置文件?那么官方文档在这里又表明白:

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

在 .user.ini 气势气魄的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 配置可被识别。

这里就很清楚了,.user.ini实际上就是一个可以由用户“自界说”的php.ini,我们可以或许自界说的配置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的配置。(上面表格中没有提到的PHP_INI_PERDIR也可以在.user.ini中配置)

实际上,除了PHP_INI_SYSTEM以外的模式(包罗PHP_INI_ALL)都是可以通过.user.ini来配置的。

并且,和php.ini差异的是,.user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启处事器中间件,只需要期待user_ini.cache_ttl所配置的时间(默认为300秒),即可被从头加载。

然后我们看到php.ini中的设置项,惋惜我沮丧地发明,只要稍微敏感的设置项,都是PHP_INI_SYSTEM模式的(甚至是php.ini only的),包罗disable_functions、extension_dir、enable_dl等。 不外,,我们可以很容易地借助.user.ini文件来结构一个“后门”。

Php设置项中有两个较量有意思的项(下图第一、四个):

enter image description here

auto_append_file、auto_prepend_file,点开看看什么意思:

enter image description here

指定一个文件,自动包括在要执行的文件前,雷同于在文件前挪用了require()函数。而auto_append_file雷同,只是在文件后头包括。 利用要领很简朴,直接写在.user.ini中:


auto_prepend_file=01.gif


01.gif是要包括的文件。

所以,我们可以借助.user.ini轻松让所有php文件都“自动”包括某个文件,而这个文件可以是一个正常php文件,也可以是一个包括一句话的webshell。

测试一下,我别离在IIS6.0+Fastcgi+PHP5.3和nginx+fpm+php5.3上测试。 目次下有.user.ini,和包括webshell的01.gif,和正常php文件echo.php:

enter image description here

enter image description here

会见echo.php即可看到后门:

enter image description here

Nginx下同样:

enter image description here

enter image description here

那么,我们可以猥琐地想一下,在哪些环境下可以用到这个姿势? 好比,某网站限制不答允上传.php文件,你便可以上传一个.user.ini,再上传一个图片马,包括起来举办getshell。不外前提是含有.user.ini的文件夹下需要有正常的php文件,不然也不能包括了。 再好比,你只是想埋没个后门,这个方法是最利便的。

梦飞科技 - 全球数据中心基础服务领先供应商

Copyright © 2003-2019 MFISP.COM. 国外服务器租用 IDC公司 版权所有 粤ICP备11019662号