文件上传漏洞原理:服务器端没有对文件上传进行严格的过滤,导致上传的文件可以被解析成可执行的脚本文件,获取服务器端的shell对服务器进行控制,以达到攻击目的。
流量特征:请求头会有上传文件的文件名,比如php后缀名的文件;请求体中可以看到显著的木马脚本,比如Php一句话木马@eval函数。
防御方法:前后端验证相结合,尽量使用白名单;对上传文件的大小进行限制;对上传文件的文件名进行重命名;对上传文件的路径设置可写不可读权限;对上传文件设置单独的文件服务器;对上传文件进行二次渲染(针对图片马);更新web中间件的版本以及导致漏洞的配置;删除临时文件等。
绕过手法:
前端验证绕过手法:禁用浏览器的js脚本的解析功能
服务器端验证绕过手法:黑名单(重写扩展名,如扩展名php改为phtml或php+数字,在扩展名末尾添加空格或‘.’或‘. .’或‘::$DATA’,文件拓展名大小写或双写绕过等);白名单(00截断);MIME验证:content-type请求头字段进行绕过;.htaccess配置文件绕过:服务器端允许上传.htaccess文件;利用文件头(幻术)进行绕过:对于文件来说,文件内容的前两个字节保存的是文件的类型信息,可以通过将上传文件的文件头的前两个字节改成符合白名单要求的文件类型的文件头进行上传绕过;web中间件漏洞(apache的多扩展名解析漏洞test.php.a.b;iis文件解析漏洞:iis6.0会把xx.asp目录下的所有文件当作asp进行解析,会把;后的扩展名进行忽略,test.php;.jpg→test.php,nginx和iis7.0中如果php-cgi映射配置不当会导致对访问资源路径以路径分隔符为配置进行文件查找,找不到从右向左继续查找,直到找到一个存在的资源,当成路径分隔符最右侧的文件类型进行解析,那就可以利用这一点,把最右侧文件的类型设置成不存在的php文件,而上传上去的图片扩展名的脚本就会被当成php进行解析);条件竞争漏洞:服务器端使用多线程方式对上传文件进行处理,多人同时在线进行文件上传,多人同时进行文件访问,服务器端还没有来得及对上传的不合法文件进行删除处理,非法文件就被访问了,得以执行,这样就会对服务器造成威胁;制作图片马绕过等
判断是否成功:查看响应头状态码是否为200,响应体是否有success upload关键字或者文件上传路径。
一、LOW级别
1.安全级别修改为low
2.上传我们的一句话木马文件
3.上传成功
4.打开中国蚁剑,输入URL地址,测试成功
二、Medium级别
1.安全级别修改为medium
2.仍旧上传之前的一句话木马文件,发现对文件格式进行了限制
3.修改文件格式,重新尝试上传
4.文件上传成功
5.需要将文件格式修改为php格式,所以打开bp,重新上传,进行抓包,并修改后缀名
6.Forword后,文件上传成功
7.打开中国蚁剑,输入URL地址,测试成功
三、High级别
1.安全级别修改为high
2.上传PNG文件,发现未能上传成功
3.查看源代码,发现不仅对文件格式进行了限制,也对文件大小进行了限制
4.任意搜一张文件尺寸比较小的图片,制作图片马
5.上传成功
6.修改安全级别为low级别,在文件包含模块输入文件路径
7.网页显示如下,漏洞利用成功