题目是SUCTF 2019的web题,
题目源码:https://github.com/team-su/SUCTF2019/tree/master/Web/checkIn
也是看了大佬的writeup才做出来,太菜了。。。orz
学到了一种新的上传姿势。
打开题目是一个上传界面。
随便上传一个php文件,意料之中被拦。
burp抓包改后缀为jpg,提示说包含了<?
,看来对文件内容也进行了过滤
于是将php标记格式改为脚本标记格式:<script language=php> phpinfo() </script>
报错为 exif_imagetype:not image! ,应该是用了exif_imagetype()
函数对文件格式进行了检查
注:exif_imagetype() 读取一个图像的第一个字节并检查其签名。
这里可以用一般的图片马来绕过(注意图片中不能有”<?
“,这也是比较坑的地方),或者直接在内容上加上图片的标识头。比如:GIF
所以,可以是这样:
成功传入。
但上传上去了只是jpg格式,没法直接利用。
是时候就引出了.user.ini文件了。
原理可见p神文章https://wooyun.js.org/drops/user.ini文件构成的php后门.html
简单来说,.user.ini文件形成后门原理就是会在执行所有的php文件之前包含.user.ini所指定的文件
比如,.urer.ini文件中内容:auto_prepend_file=1.jpg
那么,所有的php文件执行前都会将1.jpg当做php类型的文件先包含执行一遍。这也是这道题的关键。(学到新姿势了。。orz)
所以返回到这道题中来,我们先上传一个.user.ini的文件,将其内容设置为auto_prepend_file=shell.jpg
,别忘了加上图片头GIF
接着上传一个shell.jpg的一句话
接着访问上传目录下的index.php,post密码shell,看到效果。
接着在根目录下找到flag。之后cat /flag得到flag