Practice - CTFSHOW WEB入门 文件上传篇
web151
经测试可知,这道题只有前端验证文件名后缀的限制。burp 抓包后改成 php 传 shell。
1 | POST /upload.php |
flag 在 flag.php
web152
没看出来和上一题有什么差别,一样的报文换个 url 接着打。
web153
这一题在后端禁止上传后缀名为 php 的文件,不过还允许上传 .ini 文件,这里选择用 .user.ini 包含 png 文件执行代码。
上传 .user.ini :
1 | POST /upload.php |
上传被包含的 1.png :
1 | POST /upload.php |
/upload/ 就会包含 1.png 的 shell 。
web154
这次还加入了对文件内容的检测,如果文件内容包含 php 就不给上传,改用 <?=
代替 <?php
从而绕过检测。
1 | POST /upload.php |
1 | POST /upload.php |
web155
同上题。
web156
这一题的禁用名单新增了左方括号,编码或者 <?=`tac ../flag*` 都可绕过去,和上题没啥区别。
1 | POST /upload.php |
1 | POST /upload.php |
system($_GET[1]);
1 | POST /upload.php |
web157
这一题禁用了 ;
,改用 ?>
代替。
1 | POST /upload.php |
1 | POST /upload.php |
web158
同上题。
web159
这题相比前两题禁用了 (
,不过对 tac ../fla*
的那个 payload 没影响。
1 | POST /upload.php |
1 | POST /upload.php |
web160
这一题相比上一题禁用了反引号和 %20
,不要忘了还可以用 .
拼接被禁用的 php
。
1 | POST /upload.php |
1 | POST /upload.php |
web161
相比前面几题,后端加入了文件头校验。头部添加 GIF78a
可绕。
1 | POST /upload.php |
1 | POST /upload.php |
web162
这一题相比前面几道题,上传文件的内容不允许包含 .
,上传不带后缀的文件即可包含,例如 aaa
。
想要使用文件名没有 .
的 session 包含,但 ctf.show 这段时间不给条件竞争了,要考虑下别的方法了。
找到了一位师傅的非预期文章 https://blog.csdn.net/Kracxi/article/details/122954230 。
通过异或编码绕过这里不能直接用 python 的 urllib.parse.unquote 函数编码参数,需要自行写一个 int2byte 的函数,这里遇到个坑。
顺带用 python 实现了下 php 中对字符串的取反,其实就是 255 - 字符的ascii
得到的 ascii 取字符。于是就有了如下脚本。
1 | POST /upload.php |
日志包含 getshell
1 | import requests |
web163
这道题相比上一道题,区别在于会删除除了 .user.ini
外的文件但有 2s 的 sleep,可以通过循环运行脚本上传保持这个文件一直存在。
一开始也考虑了其他解法,不过 .user.ini 远程包含的方法已经行不通了,条件竞争也被禁用了。
1 | POST /upload.php |
脚本同上题,这次似乎禁用了 $_POST,就没日志包含 getshell。
1 | import requests |
后来读出来的 upload.php:
1 |
|
web164
png 图片马,二次渲染绕过
1 |
|
1 | POST /download.php?image=4a47a0db6e60853dedfcfdf08a5ca249.png&0=system |
web165
jpg 二次渲染,脚本跑不通。
web166
随意上传一个文件,下载链接 /upload/download.php?file=
存在任意文件读取。查看上传和下载源码
upload.php
1 |
|
download.php
1 |
|
构造 zip 上传,包含文件执行命令读取 flag.php。
1 | $ echo "<?=`tac ../flag.php`;" > payload.zip |
web167
题目给出提示是 apache,可以上传 .htaccess 改变文件解析规则,这里添加规则将 jpg 文件作为 php 脚本解析。
1 | POST /upload.php |
然后随便传个马
1 | POST /upload.php |
web168
可以直接上传 php 文件,但对文件内容有检测,提示为基础免杀。
1 | POST /upload.php |
web169
高级免杀,比上题要严格,检测了 <
。这里选择日志包含。
1 | POST /upload.php |
1 | POST /upload.php |
web170
同上题。