一、漏洞原理
通过名字就知道是在有上传文件的地方会有文件上传漏洞,这个漏洞的形成原因比如上传头像,它是只能上传图片的形式,但是它的过滤不严导致我们可以上传恶意脚本-后门等操作,所以只要能上传文件的地方都有可能存在文件上传漏洞。
二、绕过方法
上面也说了比如上传头像功能,开发是会写上传过滤,比如只允许上传图片形式,但是可能写的不严,我们就可以通过各种方法对它进行绕过,网上有很多的绕过方法,我在这里就举几个常见的绕过方法,并不是说就没有其它绕过方法,这些绕过方法都是自己慢慢学习和收集的。我们这里演示的环境用的是ggctf-upload靶场
- Javascript检测(前端验证)
前端验证就是浏览器检测,你上传的不是png文件在你点击提交后burp还没有抓到包就已经返回上传失败。解决办法可以关闭浏览器的javascript,或者上传png文件在burp抓包后更改文件后缀
- 文件后缀绕过
检查上传文件的后缀名,源码中限制了很多中源码的上传,但是我们可以通过双写绕过
上传成功这里原本考的不是双写绕过,是.htaccess文件绕过,所以我这里就简单的说一下这个题,这个文件的作用是可以改变文件解析的方式,它属于apache的配置文件。比如这里可以先上传.htaccess文件文件内容:<FilesMatch "\.jpg"> SetHandler application/x-httpd-php </FilesMatch>,就是把jpg文件当作php来解析,我们上传一个jpg文件在jpg文件中插入一句话木马就可以了。
- Content-Type绕过
这个就是检测文件类型,我们直接把php文件类型更改为png的文件类型就可以了
image/png就是png文件类型
- 00截断绕过
操作系统是由C语言和汇编语言写而成,而它们回把%00当作结束符号,所以我们在上传文件时在png或者jpg前加上%00后面的内容就没了。
- 条件竞争
在你上传文件后会返回文件后缀错误,但是有可能会是在你上传到服务器后在检测是否存在病毒,这样我们可以通过上传的那一刻我们访问文件地址连接木马。,而连上木马后它删除也没有用了
这样写的作用是我们访问这个文件后会自动生成一个xiao.php木马文件
抓取上传文件的包选择零载荷,无限循环
在抓取一个访问的数据包,一样无限循环
生成成功
三、修复方法
- 设置白名单只允许上传文件后缀
- 上传文件后更改上传文件名字
- 上传后更改上传文件路径,而且不反回上传文件的路径
- 检查文件大小,文件头
- 利用云储存
- 跨站存储