文件上传漏洞原理:
通常是由于对上传的文件内容和类型没有进行严格过滤和审查,攻击者可以通过上传脚本、木马获得服务器的webshell权限。
文件上传本身没有问题,有问题的是上传的文件服务器将以哪种格式去执行。
一般情况下,攻击者可以通过上传脚本、木马、病毒、webshell,在知道上传文件路径的情况下,加以利用。
大部分情况下,导致文件上传漏洞的原因是对上传的文件没有进行过滤审查,还有一部分是因为服务器本身存在解析漏洞,导致上传的文件以脚本的格式去执行。
文件上传的常见绕过方式和防御方式:
防御方式:
1.限制文件上传的路径为不可执行
2.检验文件后缀名
3.使用白名单和黑名单对可上传文件进行限制
4.对图片进行二次渲染
5.使用随机数对文件名和文件路径进行更改
6.检查http头信息中的content-type字段,看是否是可上传的文件类型
7.分析头信息内容,不同的文件类型mime信息是不一样的
绕过方式:
1.从客户端绕过:上传文件时抓包、将文件类型改为可以上传的文件类型。
2.从服务器端绕过:将http头信息中的content-type字段改为可以上传的文件类型
3.结合其他漏洞进行绕过,解析漏洞、文件包含漏洞等
4.利用一些WAF规则进行绕过
①WAF会限制检验的文件的大小;例如,WAF的过滤规则是仅检验文件的4M内容,那么我们可以选择大于4M的文件进行上传,在文件尾部插入脚本代码,WAF将不会检测
②WAF检验post请求的数据:有些waf会检验post传来的参数,那么我们可以通过抓包,将post请求更改为get请求。
文件上传漏洞的三个条件是:文件可上传、上传文件可执行、上传路径可知。所以我们在防御的时候可以通过这三个条件去防御,文件上传是服务器必须的功能,这个不能限制,所以可以在其他两个方面进行限制,限制上传的文件不可执行、使用随机数对文件路径和文件名进行重命名
文件上传漏洞是最直接的漏洞,因为它可以通过上传webshell去操控服务器,危害很大。