简单总结一下文件上传漏洞的一些绕过姿势与防御;
题库:https://github.com/c0ny1/upload-labs
0x00 漏洞简介
存在条件
- 存在上传点
- 可以上传动态文件
- 上传目录有执行权限,并且上传的文件可执行
- 可访问到上传的动态文件
0x01 基本姿势
- 基本的服务端检测包括MIME检测等,此类可以通过抓包修改等简单绕过
- 内容过滤,可以考虑copy命令合并图片和脚本
- 强混淆
- Webshell收集项目
- 多个filename
- 目录穿越 ../../../ .././.././../ (./是为了防止../../被过滤)
- 解析漏洞 首先根据指纹确定中间件的版本
- 确定是否存在00阶段类型的漏洞
0x02 高级姿势
- 重绘图
- 文件包含与PHPINFO
- 在线解压缩漏洞
- webshell解压到网站目录(可使用../目录穿越)
- 文件软链接的方式,将根目录等敏感目录软连接到自己的文件,之后将软链接压缩上传
0x03 防御
0x04 一些CTF题目
4-1 weekly-ctf-07 00截断
首先,这个问题的难点在于不只是后缀验证一次,
- 上传的时候必须是jpg png gif,就是下图的灰色箭头;content-type倒是不重要
- 红色箭头的路径会和你的文件名进行一次拼接,拼接之后再进行一次检测,这次要求你必须是php后缀
- 所以解决办法只能是让地址生效,拼接后后面的地方失效
这个题的重点在于这个文件路径是可控的
那关键点就在这儿了,如何操作让a.php后边拼接部分失效呢,最简单的就是最流行的00截断法,这个要在16进制界面更改,下图2
这一行的0d 0a是什么意思呢
所以要留空,留一个字符,可以是空格等
只需要把留空的字符改为00,forward一下就可以出flag了