文件上传本身是一个系统的正常需求,但是由于开发人员在开发时欠缺相关的安全知识,在对用户文件上传部分的控制不足或者缺陷,而导致用户越过其本身权限向服务器上传可执行的动态脚本文件。
这里上传的文件可以是木马,病毒、恶意脚本或webshell等。
这种攻击最为直接有效但是预防相对简单,除了开发语言方面,主要通过安全设备WAF(web application firewall,本文不对此进行讨论)来进行防护。
同时要对服务器的处理逻辑和业务处理逻辑进行深入理解,减少开发的系统的安全漏洞,以便预防黑客利用这些漏洞,对公司造成声誉和财产上的伤害。
造成文件上传的原因及原理
原因:
1.对上传文件的后缀名(扩展名)没有较为严格的限制;
2.对上传文件的MIMETYPE没有做检查;
其他试验中为涉及暂不列出。
原理:
在WEB中进行文件上传的原理通常是将表单设置为multipart/form-data,同时加入文件域,而后通过HTTP协议将文件内容发送到服务器,服务器读取这个分段(multipart)的数据信息,并将其中的文件内容提取出来并保持。通常,在进行文件保持的时候,服务器端会读取文件的原始文件名,并从这个原始文件中得出文件的扩展名,而后随机为文件起一个文件名(为防止重复),并加上文件的扩展名来保持到服务器上。
owasp-bwa提供了低中高三个级别的文件上传代码,如下:
低安全级别(开发小白):
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename( $_FILES['uploaded']['name']);
if(!***move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)***) {
echo '<pre>';
echo 'Your image wa