原标题:文件上传限制绕过技巧

严正声明:本文仅限于技术讨论,严禁用于其他用途。

简介

文件上传漏洞是web安全中经常利用到的一种漏洞形式。一些web应用程序中允许上传图片,文本或者其他资源到指定的位置,文件上传漏洞就是利用这些可以上传的地方将恶意代码植入到服务器中,再通过url去访问以执行代码。但在一些安全性较高的web应用中,往往会有各种上传限制和过滤,导致我们无法上传特定的文件。本文将就此展开讨论,通过本文的学习你将了解到Web应用中文件上传的处理和验证发送流程,以及我们该如何绕过这些验证。

客户端验证

客户端验证是一种发生在输入被实际发送至服务器之前进行的验证。这类验证大都都是通过Java,VB或HTML5来完成的。虽然,这对于用户来说响应速度更快体验也更好。但对于恶意攻击者来说,这些验证似乎就显得略为低级。

客户端验证绕过

这种类型的绕过也非常简单,我们可以关闭浏览器上的Java或是在浏览器发出请求之后,在被发送至服务器之前来篡改该HTTP请求即可。

示例:

1.

正如你所看到的,此Java仅在请求被实际发送至服务器之前处理你的请求,以及检查你上传的文件扩展名是否为(jpg,jpeg,bmp,gif,png)。这样的话,我们就可以拦截该请求并篡改文件内容(恶意代码),然后将图片扩展名更改为可执行文件的扩展名(如php,asp)。

如上图所示,我们试图上传一个直接的PHP文件,Java阻止了我们的文件上传请求。

我们可以通过浏览器来上传一个正常的图片格式来绕过该验证,然后拦截该请求再将其改回为php格式并将文件内容替换为我们的恶意代码,这样我们就能够成功上传我们的恶意php脚本了。

文件名验证

顾名思义,就是在文件被上传到服务端的时候,对于文件名的扩展名进行检查,如果不合法,则拒绝这次上传。检查扩展名是否合法有两种常用策略,即黑名单和白名单策略。

黑名单策略,即文件扩展名在黑名单中的为不合法。白名单策略,即文件扩展名不在白名单中的均为不合法。相对于黑名单,白名单策略更加安全的。通过限制上传类型为只有我们接受的类型,可以较好的保证安全,因为黑名单我们可以使用各种方法来进行注入和突破。

文件名绕过

我们可以通过上传一些平时不怎么用的容易被人忽视的文件扩展名,来绕过这种类型的验证。

绕过黑白名单策略:

黑名单绕过

通过上传不受欢迎的php扩展来绕过黑名单。例如:pht,phpt,phtml,php3,php4,php5,php6

白名单绕过

通过某种类型的技巧来绕过白名单,例如添加空字节注入(shell.php%00.gif),或使用双重扩展来上传文件(shell.jpg.php)。

此外,我们还可以尝试扩展名大小写来绕过,例如:pHp,Php,phP。

示例:

1. if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" 2. && $imageFileType != "gif" ) { 3. echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";

以上代码将会阻止除jpg,jpeg,gif,png扩展名以外的,所有其它文件类型上传。在本例中我们将尝试绕过该检查,并在Web服务器上传一个php文件。

黑名单绕过

正如你所看到的,将php文件的后缀更改为.php5(Apache服务器会将其视为php文件执行)后,就可以成功绕过该上传验证。

白名单绕过

如上图所示,我们使用了双重扩展名(shell.jpg.php)来绕过验证。

Content-Type验证

Content-Type(内容类型),一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件。例如,一些图像文件上传通过检查文件的内容类型是否为图像类型来验证上传的图像。

Content-Type绕过

该类型的绕过也非常简单,只需将“Content-Type”的参数类型更改为“image/ *”即可,例如“image/png”, “image/jpeg”, “image/gif”。

示例:

1.

以上代码会检查Content-Type header中的MIME类型,仅接受类型为image/jpeg, image/gif, image/png的文件上传。我们只需只需将“Content-Type”的参数类型更改为其可接受的类型即可绕过。

CONTENT-LENGTH验证

Content-Length验证是指服务器会对上传的文件内容长度进行检查,超出限制大小的文件将不允许被上传。虽然这种类型的验证不是很受欢迎,但在一些应用的文件上传中也时常能碰到。

CONTENT-LENGTH绕过

针对这种类型的验证,我们可以通过上传一些非常短的恶意代码来绕过。上传文件的大小取决于,Web服务器上的最大长度限制。我们可以使用不同大小的文件来fuzzing上传程序,从而计算出它的限制范围。

示例:

1. if ($_FILES["fileToUpload"]["size"] > 30) { 2. echo "Sorry, your file is too large."; 3. }

以上代码将限制大小超过30字节的文件上传。我们可以通过上传一个30字节以内大小的恶意payload文件来绕过它。

参考来源

http://www.securityidiots.com/Web-Pentest/hacking-website-by-shell-uploading.html

http://www.net-informations.com/faq/asp/validation.htm

https://www.owasp.org/index.php/Unrestricted_File_Upload

http://www.sitepoint.com/mime-types-complete-list/

https://www.w3schools.com/php/php_file_upload.asp

https://stackoverflow.com/

*参考来源:exploit-db,FB小编 secist 编译,转载请注明来自FreeBuf.COM返回搜狐,查看更多

责任编辑:

php上传禁止php_文件上传限制绕过技巧相关推荐

  1. 文件上传 java web_JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

  2. php 上传文件漏洞,【文件上传】PHP文件上传漏洞

    0x01 文件上传漏洞 文件上传漏洞顾名思义就是用户上传一个可执行的脚本文件,获得了执行服务器端命令的能力.通常,文件上传是getshell最常用.最直接的方式了.但是,文件上传本身是一个正常的业务需 ...

  3. ***使用PHP实现文件上传和多文件上传

    http://www.365mini.com/page/php-upload-file.htm 在PHP程序开发中,文件上传是一个使用非常普遍的功能,也是PHP程序员的必备技能之一.值得高兴的是,在P ...

  4. SpringMVC 单文件上传与多文件上传

    一.简述 一个javaWeb项目中,文件上传功能几乎是必不可少的,本人在项目开发中也时常会遇到,以前也没怎么去理它,今天有空学习了一下这方面的知识,于是便将本人学到的SpringMVC中单文件与多文件 ...

  5. springboot文件上传下载实战 ——文件上传、下载、在线打开、删除

    springboot文件上传下载实战 文件上传 文件上传核心 UserFileController 文件上传测试 文件下载与在线打开 文件下载.在线打开核心 UserFileController 文件 ...

  6. 多文件上传,大文件上传3、5个G,那都不是事

    一套大文件上传的教程给大家. https://www.yyjcw.com/html/ke/34.html 重点讲解了多文件上传,大文件上传,分块上传,断点续传,文件秒传,上传失败自动修复再上传等功能, ...

  7. windows上软件上传至linux上,《如何将windows上的软件包或文件上传到linux服务上》...

    如何将windows上的软件包或文件上传到linux服务上,下一句就是如何让将linux的文件下载到win上.哈哈 方法不止这一种,有超多的方法,要是虚拟机,它自带的有share这个选项,你可以点击v ...

  8. springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显

    springboot文件上传,单文件上传和多文件上传 项目结构及pom.xml 创建文件表单页面 编写javabean 编写controller映射 MultipartFile类 @RequestPa ...

  9. 前后端分离 -- 深入浅出 Spring Boot + Vue + ElementUI 实现相册管理系统【文件上传 分页 】 文件上传也不过如此~

    前后端分离 – 深入浅出系列 Spring Boot + Vue + ElementUI 实现相册管理系统[文件上传 分页 ] 文件上传也不过如此~ 引言 Hello,我是Bug终结者,一名热爱后端J ...

最新文章

  1. android设备未指定怎么办,APKpath未指定为模块“示例 – 示例”
  2. FPGA的设计艺术(11)FPGA的构建过程
  3. android界面布局题,【填空题】Android 系统中, 用于定义布局显示在界面上的风格。...
  4. 机器人学习--视觉定位数据集介绍
  5. 单林多域群集环境中将Exchange 2003迁移到Exchange 2010之二
  6. 【机器视觉】 dev_set_window_extents算子
  7. 电子商务之 网店客服中心服务用语规范
  8. mysql全文索引含义_【分针网】MySQL全文索引应用简明教程
  9. 前端学习(3028):vue+element今日头条管理-使用icon图标的处理
  10. OpenCV学习笔记(六):非线性滤波-中值、双边:medianBlur(),bilateralFilter()
  11. 小白学python爬虫_小白学爬虫——第一部分:简单学习Python
  12. C语言基础教程读书笔记2(第二章常量、变量、类型转换)
  13. 2005年7月19日
  14. oracle 归档模式 ASM,oracle rac启用归档模式
  15. Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/
  16. 二进制像素绘制程序 scratch编程三级
  17. 天勤率辉考研数据结构2021
  18. 世界首富马斯克的编程水平怎么样?
  19. 计算机税率函数,2018最新按5000元个税Excel计算公式,帮你整理齐了!
  20. net use \\192.168.54.145 /user:administrator 12345qwert无法连接,错误码1326

热门文章

  1. C++新手,用OOP思想编写的推箱子小游戏,请多赐教
  2. 最小二乘法及应用实例
  3. 解决 org.gjt.mm.mysql.Driver 报错问题 实测有效
  4. 手机外接usb摄像头软件下载_手机打碟app下载安装_手机打碟软件最新版免费下载...
  5. html怎么改变网页整体的大小,html设置浏览器大小
  6. 通过天眼查查询相关企业信息
  7. 二次函数回归方程_高三专题||【导数专题四】利用导数研究函数图形专项习题...
  8. html屏幕缩小图片不失真,html图片失真怎么办
  9. WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!的分析
  10. 浮窗---创建Activity浮窗(可拖动)