目录

  • 一.原理
  • 二. 高危触发点
  • 三.前端处理
  • 四. 后端处理
  • 五. 上传分类
    • 1. js验证
      • 绕过方法
    • 2. 文件扩展名检测
      • (1). htaccsee上传漏洞
      • (2). Apache1.x,2.x解析漏洞
      • (3). iis解析漏洞
      • (4).编辑器解析漏洞
      • (5). iis 7.0/7.5解析漏洞
    • 3. MIME-type检测
      • 定义
      • 常见的mimetype类型:
      • 怎么检测
      • 绕过方法
    • 4. 文件头检测
      • 定义
      • 绕过文件头校验
      • 常见的文件头上传方式
    • 5. 条件竞争
      • 原理和绕过方法
  • 六. 防御
    • 修改配置
    • 判断文件类型
    • 使用随机数改写文件名和文件路径
    • 单独设置文件服务器的域名
    • 二次渲染
  • 七. 黑白名单
    • 黑名单
    • 白名单

一.原理

在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。

二. 高危触发点

相册、头像上传
视频、照片分享
附件上传(论坛发帖、邮箱)
文件管理器

三.前端处理

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

"upload_file.php"规定了处理上传数据的后台php脚本文件。
“method” 规定上传的方法为post方法
"enctype"规定了上传数据的编码方式,
multipart/form-data表示不进行编码,文件上传的表单一般采用这种

四. 后端处理

<?php
if ($_FILES["file"]["error"] > 0){echo "Error: " . $_FILES["file"]["error"] . "<br />";}
else{echo "Upload: " . $_FILES["file"]["name"] . "<br />";echo "Type: " . $_FILES["file"]["type"] . "<br />";echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";echo "Stored in: " . $_FILES["file"]["tmp_name"];}if (file_exists("upload/" . $_FILES["file"]["name"])){echo $_FILES["file"]["name"] . " already exists. ";}else{move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);echo "Stored in: " . "upload/" . $_FILES["file"]["name"];}
?>

服务器拿到上传的文件数据之后,会先将其存为一个临时文件,由$_FILES这个全局变量调取使用。
$_FILES里面有很多文件对应的属性,'type’表示上传文件的文件类型,'name’表示长传文件的文件名,'size’表示长传文件的文件大小,'tmp_name’表示临时文件的存储位置。
通过对这些属性进行判断与限制,可以控制文件上传的类别,大小等…

五. 上传分类

1. js验证

Web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端javascript代码完成的。由于恶意用户可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件,就会导致基于js的校验很容易被绕过。

绕过方法

(1).删除或者禁用js
火狐浏览器禁用js:在页面输入about:config,打开后关闭javascript.enabled
(2).使用代理上传文件,比如Burp Suite

2. 文件扩展名检测

(1). htaccsee上传漏洞

在localhost目录的某目录下创建一个.htaccess文件
文件加效果内容

AddHandler php5-script .gif

那么该目录下所有的后缀名为.gif都可以被当成php文件执行,误伤范围较广,而且相对于php2018版本里5.5之后通通报错。
<FilesMatch “1.gif”>
SetHandler application/x-httpd-php
AddHandler php5-script .gif

那么该目录下所有的后缀名为.gif都可以被当成php文件执行,针对单个文件使用,而且相对于php2018版本里5.5之后通通报错。

(2). Apache1.x,2.x解析漏洞

由于apache1和2点几的版本存在解析漏洞,会将文件名识别顺序由右至左的顺序,导致aaa.php.bbb会被识别成aaa.php,从而造成文件上传漏洞。
由于apache配置文件含有AddHandler php5-script .php这句话时,那么只要文件名含有.php,即使是.php.jpg后缀名的也可以当作php文件执行,经实验2018phpstudy可以执行成功的有5.4.45和5.5这两个版本,其他版本均出现以下内容。

(3). iis解析漏洞

打开虚拟机windows2003,然后安装好iis,然后在默认web的目录下新建后缀名为.asp的目录,再里面新建一个文本文档,内容为<%=now()%>,那么通过web网站浏览将会导致该文本被当作asp文件执行,即可造成asp攻击。
还可以直接新建一个文本,内容为<%=now()%>,然后改名为xx.asp;.jpg,由于服务器默认不解析;后面的内容,所有通过网页浏览该文件会被当成asp文件执行。

(4).编辑器解析漏洞

首先将文本编辑器放置windows2003虚拟机的iis默认网站目录下,对这个文件夹设置权限,对iis和internet来宾用户允许其完全控制。
利用iis远程打开/eweb/admin_login.asp,打开之后发现需要登陆账号密码,可以使用admin/admin,admin/admin888, admin/admin666,或者打开默认数据库路径 eweb/db/ewebeditor.mdb下载账号和密码。
然后就可以用mdbview.exe打开下载文件获得经md5加密后的账号和密码
登陆文本编辑器的网页,进入上传文件管理,然后在url输入&dir=…出现以下情况。
调整文本编辑器的环境,打开iis服务器,打开默认网站的属性,打开主目录下的配置里的选项,勾上启用父路径。
在网页加上&dir=…/…/…/…/windows/system32/drivers/etc即可出现host文件了。
由于浏览器版本问题,使用虚拟机win3打开该网页的样式管理,然后设置属性,保证可以上传asp文件。
打开预览选中插入或修改图片这个按钮上传asp文件,然后点下面代码按钮查看地址,在浏览器打开即可。

(5). iis 7.0/7.5解析漏洞

7.0iis使用fastcgi配置会将*.php当成php执行,而7.0iis要判断php文件时会先让php软件去判断,但是由于php软件判断的文件不存在的话,会将上一层文件当成php文件去判断,从而造成漏洞注入。
搭设完环境后,在iis目录下创建一个phpinfo.php文件,内容为<?php phpinfo();?>,文件重命名为phpinfo.png,然后使用web远程打开192.168.19.129/phpinfo.png/1.php,这时候由于1.php不存在,phpinfo.png会被当成php文件去执行。

3. MIME-type检测

定义

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。

常见的mimetype类型:

 text/plain(纯文本)text/html(HTML文档)text/javascript(js代码)application/xhtml+xml(XHTML文档)image/gif(GIF图像)image/jpeg(JPEG图像)image/png(PNG图像)video/mpeg(MPEG动画)application/octet-stream(二进制数据)application/pdf(PDF文档)

怎么检测

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'];          if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '文件类型不正确,请重新上传!';}} else {$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';}
}

绕过方法

使用bp抓包发送到repeater模块,然后修改Content-Type的类型,修改为目标检测的类型

4. 文件头检测

定义

文件头就是为了描述一个文件的一些重要的属性,比如图片的长度、宽度、像素尺寸等,当程序打开文件时读取这些属性对文件进行处理。

绕过文件头校验

Web应用程序在校验文件类型、文件扩展名的同时,也会校验文件头,从而进一步确定文件的类型。针对这种情况,可以通过在上传的一句话木马文件的开头加入特定的文件头从而绕过这种校验方式。

常见的文件头上传方式

(1) .JPEG;.JPE;.JPG:”JPGGraphic File”
(2) .gif:”GIF 89A”
(3) .zip:”Zip Compressed”
(4) .doc;.xls;.xlt;.ppt;.apr:”MS Compound Document v1 or Lotus Approach APRfile”

5. 条件竞争

原理和绕过方法

利用PHP代码逻辑漏洞,由于代码的逻辑造成文件先上传成功再判断是否符合要求再删除,可以利用上传之后删除之前的时间差进行漏洞攻击,由于时间较少,可以利用bp抓包使用多次攻击,使上传文件执行,因为文件会被删除,所以可以上传可执行文件,执行后产生一句话木马文件达到长久漏洞注入目的。(文件可以利用fopen函数)

六. 防御

修改配置

文件上传目录设置权限为不可执行,那么即使利用上传漏洞成功上传,上传的文件也无法执行,造成不了漏洞攻击。
指定特定扩展名的文件的处理,原理是指定Response的Content-Type可以加上AddType text/plain .pl .py .php,意思是把以上后缀名的文件当成纯文本来显示。
完全禁止特定扩展名的文件被访问,加入
Options-ExecCGI
AddHandler
cgi-script .php .pl .py .jsp .asp .htm .shtml .sh
在这种情况下,以上几种类型的文件被访问的时候,会返回403Forbidden的错误。
只允许访问特定类型的文件:
<?File^(.jpeg/.jpg|.png/.gif)>
Order deny,allow
Deny from all

判断文件类型

结合使用MIME Type、后缀检查等方式,在文件类型检查中,强烈推荐使用白名单方式,黑名单方式已经无数次被正面是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码;或者使用白名单的时候,使用分割字符串(上传来的文件名),使用”.”来分割,仅允许分割后,字符串只有两个,一个是文件名,一个是文件扩展名。

使用随机数改写文件名和文件路径

文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写文件名和路径,将极大增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击

单独设置文件服务器的域名

把网站服务器和服务器分开,但是要保证,文件服务器的安全级别很高,且保证上传文件时相对高的可靠,直接把上传的图片存储在文件服务器,并在文件服务器把所有目录设置为可读可写不可执行。

二次渲染

将上传的图片利用imagecreatefromjpeg()函数重新生成新图片,并且将图片里的代码给去除,达到防御的目的,但是可以用条件竞争进行漏洞攻击。

七. 黑白名单

黑名单

1.截断
2.服务器的解析漏洞
3.大小写进行上传
4.使用多种后缀名方式绕过
jsp jspx jspf
asp asa cer aspx
php php3 php4 php5
exe exee
5.Windows特性
shell.php. shell.php空格 shell.php:1.jpg shell.php:: $DATA
. 空格 ntfs数据流特性

白名单

1.截断
2.服务器的解析漏洞
3.文件包含漏洞

文件上传漏洞的小总结相关推荐

  1. html 编辑器编码漏洞,某富文本编辑器文件上传漏洞(小论如何控制IsPostBack的值) | CN-SEC 中文网...

    在这个文本编辑器上没有找到任何按钮是可以直接上传文件的(只有插入文件上传按钮,没啥用),但是代码里面是隐藏有这样一个功能的: code 区域 protected override void Rende ...

  2. php黑名单绕过,文件上传漏洞之黑名单检测绕过

    0x00 前言 文件上传是一个很常见的功能,文件上传漏洞也比较普遍,原理简单,造成的危害却很大,是一个入门级别的漏洞.这篇文章主要针对文件上传漏洞中的 黑名单检测绕过 这个点,结合upload-lab ...

  3. 上传txt生成字典 java_文件上传漏洞fuzz字典生成脚本小工具分享

    前言 学习xss的时候翻阅资料发现了一个文件上传漏洞fuzz字典生成脚本小工具,试了试还不错,分享一下 配置 需要python2环境 使用方法 $ python upload-fuzz-dic-bui ...

  4. dvwa小马上传大马php,集训第六天:文件上传漏洞

    韩舒学姐(相当温柔)今天给我们讲解了文件上传漏洞,以及Anrwsord和Cknife等工具的使用. 上传的文件不进行限制,有可能会被利用于上传可执行文件.脚本到服务器上,并且通过脚本文件可以获得执行服 ...

  5. 上传图片被防火墙拦截_Web安全:文件上传漏洞

    文章来源:计算机与网络安全 一般将文件上传归类为直接文件上传与间接文件上传.直接文件上传就是服务器根本没有做任何安全过滤,导致攻击者可以直接上传小马文件及大马文件(如ASP.ASPX.PHP.JSP及 ...

  6. web安全之文件上传漏洞攻击与防范方法

    一. 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效 ...

  7. .hpp文件_文件上传漏洞另类绕过技巧及挖掘案例全汇总

    文件上传漏洞作为获取服务器权限最快的方式,虽然相关资料很多,但很多人对上传校验方式.如何针对性绕过检测.哪种上传和解析的场景会产生危害等还是比较模糊.本文作一些阐述,然后补充一些除了上传webshel ...

  8. 网络安全-文件上传漏洞的原理、攻击与防御

    目录 介绍 分类 上传-javascript检测 简介 原理 攻击 防御 上传-MIME检测 简介 攻击 防御 上传-后端文件格式检测 简介 原理 攻击 防御 上传-文件截断 简介 攻击 解析-Apa ...

  9. php文件上传漏洞攻击与防御

    转自:http://www.cnblogs.com/crazylocust/p/6759529.html 前言 从一年前开始学习web安全以来,一直都是在吸收零碎的知识,不断地看书与一些前辈的文章,中 ...

最新文章

  1. Python 之 Matplotlib (一)基本用法
  2. Python测试框架doctest
  3. ASP.NET MVC应用程序展示RDLC报表
  4. 重磅资源|Pytorch1.0版本的Mask R-CNN的Facebook的官方实现
  5. python语言及其应用电子版翁正秋_Python语言及其应用pdf
  6. twitter storm源码走读(五)
  7. python——成语接龙小游戏
  8. 不改变原数组的一些方法
  9. 深入理解MySQL索引设计和优化原则
  10. c++ 线程池_JAVA并发编程:线程池ThreadPoolExecutor源码分析
  11. 遗传算法初学-旅行商问题
  12. 输入防插错过压保护电路
  13. python播放音乐同步歌词_python实现简单实现歌词播放(有缺陷)
  14. 办公用品管理系统服务器版,恒达办公用品管理系统
  15. 讲解三层代码讲解(DLL规则层如何接收服务器的数据,又如何交回给服务器)--第四课(*****) DATE :2004-06-01...
  16. 分享新作:休闲小游戏『Flying Stone』
  17. 简单解决SVN cleanup failed to process the following paths错误
  18. 第三篇,网络层的IP协议
  19. 域名系统(DNS)说明
  20. 七夕节·烈火英雄·观后感

热门文章

  1. 麒麟服务器v10系统安装时报错,银河麒麟V10服务器版本编译安装php7.2.12
  2. 6.数字图像处理及MATLAB实现-马赛克
  3. 微信小程序聊天客服工具
  4. 国产操作系统能不能完全替代windows,普及大众?
  5. xp2 server application error 错误解决
  6. robotframework基础入门:(3):找不到关键字的对应方法
  7. python列表操作计算列表长度并输出,python列表 (list)
  8. 怎么用小程序挣钱?想赚钱就做这5类小程序!
  9. 《无法打开包括文件:“Eigen\Dense”:No such file or directory》亲测有效的解决方法
  10. python实现AES对文件加解密(这里使用ECB密码本模式)