[SUCTF 2019]CheckIn

题目:

[SUCTF 2019]CheckIn[SUCTF 2019]CheckIn
已知:

前端无限制,后端为PHP

分析:

[SUCTF 2019]CheckIn
[SUCTF 2019]CheckIn
[SUCTF 2019]CheckIn
初步判断后端为黑/白名单
[SUCTF 2019]CheckIn
so ==> 黑/白名单 + 内容检测:exif_imagetype
[SUCTF 2019]CheckIn
上传成功,想办法解析
[SUCTF 2019]CheckIn
没有解析漏洞,这里就要想办法,解析我们的123.png

.user.ini

用法:网站限制不允许上传.php文件,你便可以上传一个.user.ini,再上传一个图片马,包含起来进行getshell。

前提:是含有.user.ini的文件夹下需要有正常的php文件,否则也不能包含了。

解题:

[SUCTF 2019]CheckIn
[SUCTF 2019]CheckIn
蚁剑连接
[SUCTF 2019]CheckIn
找出flag
[SUCTF 2019]CheckIn

解题必备知识:

那么什么是.user.ini?

这得从php.ini说起了。php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEMPHP_INI_PERDIRPHP_INI_ALLPHP_INI_USER。 在此可以查看:http://php.net/manual/zh/ini.list.php 这几种模式有什么区别?看看官方的解释:

[SUCTF 2019]CheckIn

除了主 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:

[SUCTF 2019]CheckIn

[SUCTF 2019]CheckIn

访问echo.php即可看到后门:

[SUCTF 2019]CheckIn

Nginx下同样:

[SUCTF 2019]CheckIn

[SUCTF 2019]CheckIn

参考blog

相关文章: