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