文件上传简介:
为了让用户将文件上传到网站,就像是给危机服务器的恶意用户打开了另一扇门。即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率。企业支持门户,给用户各企业员工有效地共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。向用户提供的功能越多,Web应用受到攻击的风险和机会就越大,这种功能会被恶意用户利用,获得到一个特定网站的权限,或危及服务器的可能性是非常高的。
WebShell
就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。
WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员不容易发现入侵痕迹。攻击者可以将WebShell隐藏在正常文件中并修改文件时间增强隐蔽性,也可以采用一些函数对WebShell进行编码或者拼接以规避检测。除此之外,通过一句话木马的小马来提交功能更强大的大马可以更容易通过应用本身的检测。<?php eval($_POST[a]); ?>就是一个最常见最原始的小马,以此为基础也涌现了很多变种,如<script language="php">eval($_POST[a]);</script>等。
存在漏洞与webshell
上传文件的时候,如果服务器脚本语言,未对上传的文件进行严格的验证和过滤,就容易造成上传任意文件,包括上传脚本文件。
如果是正常的PHP文件,对服务器则没有任何危害。
PHP可以像其他的编程语言一样,可以查看目录下的文件,查看文件中的内容,可以执行系统命令等。
上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的PHP文件,从而控制整个网站,甚至是服务器。这个恶意的PHP文件,又被称为WebShell。
效果
上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接自动运行;
上传文件是WebShell时,攻击者可通过这些网页后门执行命令并控制服务器;
上传文件是其他恶意脚本时,攻击者可直接执行脚本进行攻击;
上传文件是恶意图片时,图片中可能包含了脚本,加载或者点击这些图片时脚本会悄无声息的执行;
上传文件是伪装成正常后缀的恶意脚本时,攻击者可借助本地文件包含漏洞(Local File Include)执行该文件。如将bad.php文件改名为bad.doc上传到服务器,再通过PHP的include,include_once,require,require_once等函数包含执行。
造成恶意上传的原因
一、客户端检测
程序员使用JavaScript来拒绝非法文件上传。
绕过方法:
FireBug插件:将用于检验文件扩展名的onsubmit事件删除。
中间人攻击:使用Burp Suite。首先把木马扩展名改为一张正常图片的扩展名,比如JPG扩展名,在上传时使用Burp Suite拦截上传数据,再将其中的扩展名JPG修改为PHP,就可以绕过客户端验证。(可能还需要相应地修改Content-Length)
任何客户端验证都是不安全的。客户端验证是防止用户输入错误,减少服务器开销,而服务器端验证才可以真正防御攻击者。
二、服务器端检测
2.1 白名单与黑名单验证
黑名单过滤方法:定义不允许上传的文件扩展名
黑名单的绕过方法:1.攻击者可以从黑名单中找到Web开发人员忽略的扩展名,如:cer
2.对文件的后缀名进行大小写转换,比如黑名单中有php,可以将文件的后缀改为pHp,仅限windows平台
3.在windows系统下,如果文件名以“.”或者空格作为结尾,系统会自动删除“.”与空格,利用此特性也可以绕过黑名单验证。(asp.或asp_)
白名单过滤方法:定义允许上传的文件扩展名
白名单的绕过方法:结合Web容器的解析漏洞
2.2 MIME验证
php中通过$_FILE['file']['type']来检验
绕过方法:可以在Burp Suite中更改Content-Type的内容为image/jpeg
以上,仅仅是简单的原理描述,至于实战,一无所知。具体的操作,实战的工具,步骤,遇上再更。
就别提问了,反正不会......