在suctf2019第一次遇到,这里学习记录一下
前言
在suctf2019一道上传的题目中第一次遇到,也学习掌握了新姿势,这里记录一下
.user.ini
我们先看下php官方手册对.user.ini
对说明
也就是说我们可以在.user.ini
中设置php.ini
中PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置,而且只要是在使用 CGI/FastCGI 模式的服务器上都可以使用.user.ini
这里我们发现了两个有趣的设置:auto_prepend_file和auto_append_file
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:
1 | auto_prepend_file=1.gif |
1.gif是要包含的文件。
所以,我们可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。
这两个设置的区别只是在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有exit()
时该设置无效)
在实战中的利用
综上所述.user.ini
的利用条件如下:
- 服务器脚本语言为PHP
- 服务器使用CGI/FastCGI模式
- 上传目录下要有可执行的php文件
从这来看.user.ini
要比.htaccess
的应用范围要广一些,毕竟.htaccess
只能用于Apache
但仔细推敲我们就会感到上传目录下要有可执行的php文件这个要求在文件上传中也比较苛刻,应该没有开发者会把上传文件放在主目录或者把php文件放在上传文件夹。如果都能成功上传php文件并且执行,那为何还要上传.user.ini
呢
不过把.user.ini
利用在隐藏后门上应该是个很好的利用方法,我们在存在php文件的目录下留下.user.ini
和我们的图片马或者一些看似正常php文件(其实是后门,来避开本地的一些防护软件或者安全人员的审计),这样就达到了隐藏后门的目的。