[SUCTF 2019]CheckIn
题目:
已知:
前端无限制,后端为PHP
分析:
初步判断后端为黑/白名单
so ==> 黑/白名单 + 内容检测:exif_imagetype
上传成功,想办法解析
没有解析漏洞,这里就要想办法,解析我们的123.png
.user.ini
用法:网站限制不允许上传.php文件,你便可以上传一个.user.ini,再上传一个图片马,包含起来进行getshell。
前提:是含有.user.ini的文件夹下需要有正常的php文件,否则也不能包含了。
解题:
蚁剑连接
找出flag
解题必备知识:
那么什么是.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 这几种模式有什么区别?看看官方的解释:
除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
例子:
01.gif是要包含的文件。
所以,我们可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。
测试一下,我分别在IIS6.0+Fastcgi+PHP5.3和nginx+fpm+php5.3上测试。 目录下有.user.ini,和包含webshell的01.gif,和正常php文件echo.php:
访问echo.php即可看到后门:
Nginx下同样: