文件上传漏洞
漏洞概述
文件上传是Web 应用的必备功能之一,比如上传头像显示个性化、上传附件共享文件、上传脚本更新网站。如果服务器配置不当或者没有进行足够的过滤,Web 用户就可以上传任意文件,包括恶意脚本文件、exe 程序等,这就造成了文件上传漏洞。
漏洞成因
- 服务器配置不当
- 对上传文件没有限制
- 没有考虑系统特性和验证以及过滤不严格导致限制被绕过
漏洞危害
非法用户可以利用上传的恶意脚本文件控制整个网站,甚至可以控制服务器。这个恶意脚本文件被称为webshell,也可以将webshell脚本称为一个网页后门,webshell具有十分强大的功能,比如查看服务器目录,服务器中的文件,执行系统命令等。
WebShell
WebShell是一个网站后门,也是一个命令解释器,使用HTTP协议通信,[继承了web用户的权限]。WebShell本质上是服务器端可执行的脚本文件,后缀名为.php/.asp/.aspx/.jsp。
大马
与一句话木马(小马)相比,代码量大,功能丰富。
小马
一句话木马
各个版本的一句话木马:
ASP:
<%eval request("cmd")%>
ASP.net:
<%@ Page Language="Jscript"%>
<%eval(request.Item["cmd"],"unsafe");%>
PHP:
<?php @eval($_REQUEST["cmd"]);?>
一句话木马简短干练。需要配合中国菜刀或者蚁件使用。
中国菜刀的三大基本功能
- 文件管理:包括文件上传,下载,查看,修改,执行
- 虚拟终端:可以获得cmd或bash命令行接口,执行相关命令
- 数据库管理:可以连接数据库,执行操作。
GETShell
获取WebShell的过程。
文件上传是getshell的一种方式,但不是唯一途径。
文件上传漏洞利用的条件
- web服务器开启文件上传功能,并且对外开发
- web用户对目标目录具有可写权限与执行权限。一般情况下,web目录都有执行权限。
- web容器可以解析上传的脚本
- 服务器配置不当,开启了PUT方法
漏洞防御
黑白名单策略
黑白名单是常用的安全策略之一。
PUT方法上传文件
PUT方法用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URL指定的位置。
但是,鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全问题,因此一般的web网站不食用该方法。若配置web应用程序的验证机制,或架构设计采用REST(表征状态转移)标准的同类web网站,就可能开放使用PUT方法。
JS检测绕过攻击
JS检测绕过上传漏洞常见于用户选择文件上传的场景,仅在前端使用JS脚本做检测,如果上传文件的后缀不被允许则弹窗提示。此时上传文件的数据包并没有发送到服务器。
这是有两种方法可以绕过客户端JS的检测:
- 修改或删除文件检测后缀的JS代码
- 通过抓包修改文件名后缀
分析:
<html>
<body>
<script>
function selectFile(fnUpload){
var filename = fuUpload.value;
var mime = filename.tolowerCase().substr(filename.lastIndexOf("."));
if(mime != ".jpg"){
alert("请选择jpg格式的照片上传");
fnUpload.outerHTML = fnUpload.outerHTML;
}
}
</script>
<form action="upload.php" method="post" enctype="multipart/form-data">
<lable for="