简介:文件上传漏洞是指因为程序员在对用户文件上传部分的控制不足或者处理缺陷,而致使的用户能够越过其自己权限向服务器上上传可执行的动态脚本文件。这里上传的文件能够是木马,病毒,恶意脚本或者WebShell等。javascript
webshell简介:php
WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也能够将其称之为一种网页后门。攻击者在入侵了一个网站后,一般会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一块儿,而后使用浏览器来访问这些后门,获得一个命令执行环境,以达到控制网站服务器的目的(能够上传下载或者修改文件,操做数据库,执行任意命令等)。java
WebShell后门隐蔽较性高,能够轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录。攻击者能够将WebShell隐藏在正常文件中并修改文件时间加强隐蔽性,也能够采用一些函数对WebShell进行编码或者拼接以规避检测。除此以外,经过一句话木马的小马来提交功能更强大的大马能够更容易经过应用自己的检测。<?php eval($_POST[a]); ?>就是一个最多见最原始的小马。程序员
文件上传必备条件:web
一、存在上传点(上传头像、图片、文档等地方)shell
二、用户可独立控制上传内容数据库
三、上传文件可被顺利解析(apache+php下,要求上传的web木马采用.php后缀名,存放上传文件的目录要有执行脚本的权限)apache
四、知道文件上传到服务器后的存放路径和文件名称windows
五、目录文件可被用户访问浏览器
上传检测:
1、javascript:在网站中部署Javascript脚本,在用户访问时,脚本随同网页一块儿到达客户端浏览器,当用户上传文件时,JS脚本对用户表单提交的数据进行检查,若是发现非法后缀,则终止上传。
一、利用浏览器编辑功能,直接删除onsubmit。
二、上传一个一句话木马文件修改后缀名为正常后缀名.jpg,使用代理抓包,修改扩展名为.php类恶意扩展名。
三、用户浏览器直接禁止JS功能。
四、把后缀名加入预期的后缀名,使之在白名单里面。
2、服务器端MIME:检测客户端上传的文件类型,服务器接收到HTTP包后,会先判断Content-Type是否合法,若是合法,则继续,不合法,则中断。
一、使用代理抓包,将Content-Type类型替换为可被容许的类型,从而绕过服务器后台检查。
3、黑名单防御:禁止上传特定的文件格式,不是指定的内容能够直接经过
一、利用php版本差别,尝试php四、php五、cer等后缀
二、文件大小写绕过,PHp、pHp、pHP、PHP
三、特殊文件名构造(windows下),代理抓包修改后缀名为.php.、.php_(利用windows不识别上述后缀机制,会自动去掉.和_等特殊符号)
四、%00截断(PHP5.3.7以前版本,shell.php .jpg,文件名中的空格被当成终止符,致使空格以后的内容被忽略,最终文件名变为shell.php)
4、服务器端文件内容检测
经过检测上传文件的文件头来判断当前文件的格式
图像二次渲染
检查上传文件是否为图像文件内容
一、修改文件头(在文件头插入GIF89a或GIF87a),对前20字节进行替换,后面再插入一句话木马。
二、文件二次渲染(图片和一句话文本进行合成,让数据既是图像数据也包含一句话木马)
防范文件上传漏洞常见的几种方法:
1.文件上传的目录设置为不可执行
只要web容器没法解析该目录下面的文件,即便攻击者上传了脚本文件,服务器自己也不会受到影响,所以这一点相当重要。
2.判断文件类型
在判断文件类型时,能够结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证实是不可靠的。此外,对于图片的处理,可使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
3.使用随机数改写文件名和文件路径
文件上传若是要执行代码,则须要用户可以访问到这个文件。在某些环境中,用户能上传,但不能访问。若是应用了随机数改写了文件名和路径,将极大地增长攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将由于重命名而没法攻击。
4.单独设置文件服务器的域名
因为浏览器同源策略的关系,一系列客户端攻击将失效,好比上传crossdomain.xml、上传包含Javascript的XSS利用等问题将获得解决。