web第25题
[SUCTF 2019]CheckIn
打开靶场
看来是一个文件上传的题
上传正常图片
返回路径,注意到有一个index.php
尝试直接上传一句话木马shell.php
提示非法后缀
尝试使用burp抓包修改后缀
经过测试,基本都被过滤了,尝试上传.htaccess文件
得到提示,看来使用了exif_imagetype函数来检查是否是图片文件
在木马中加上GIF89a进行图片文件欺骗
尝试上传
看来对文件内容进行了检查,不允许有<?
参考我做的另一道题的绕过方法buuctf初学者学习记录–web第9题
换一个一句话木马
<script language="php">eval($_POST['shell']);</script>
ps:根据经验,一般flag都放在根目录下,可以将一句话木马直接改成<script language='php'>system('cat /flag');</script>
,此时访问index.php就会直接列出flag,这里没这么做
进行上传
上传成功,并且提示目录下有123.gif,index.php
但是由于.htaccess文件不允许上传,无法将gif文件解析为php文件
经过查找,参考:.user.ini文件构成的PHP后门
官方文档的解释如下:
下图引用于另一位大佬的解释:原文链接
得到.user.ini文件可以达到此效果,并且甚至可以比.htaccess文件用途更广
参考上面的连接,编写.user.ini文件
这句代码的意思是,指定123.gif文件每次都包含在要执行的php文件前,前提是目录下有.php文件。上文中提到了目录下有index.php文件,那么满足条件,只要访问index.php,那么123.gif文件的代码都会先执行
尝试上传
额。我忘了还有这个函数,在文件前添加GIF89a然后上传
上传成功
可以看到目录下的3个文件,这时,访问index.php就会将123.gif中的代码包含进去,使得其成为一个shell脚本
此时用蚁剑无法连接,不知道为啥,既然知道路径,那就直接使用post提交命令scandir扫描根目录,一般flag都放在根目录
看到根目录下有flag文件,直接用file_get_contents函数进行读取,得到flag