有关文件上传的知识

  • 为什么文件上传存在漏洞

  上传文件时,如果服务端代码未对客户端上传的文件进行严格的验证和过滤就容易造成可以上传任意文件的情況,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)。

常用一句话木马

  asp一句话木马:
   <%execute(request(“test”))%>
  php一句话木马:
   <?php @eval($_POST[test]);?>
  aspx一句话木马:
  <%@ Page Language=“Jscript”%>
  <%eval(Request.Item[“test”])%>
  • 危害

  非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被称为 Webshell,也可将 Webshell本称为一种网页后门Webshell本具有非常强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等。

JS检测绕过

JS检则绕过上传漏洞常见于用户选择文件上传的场景,如果上传文件的后缀不被允许,则会弹框告知,此时上传文件的数据包并没有发送到服务端,只是在客户端浏览器使用 javascript)对数据包进行检测。

三种方法绕过js检测

  • 直接浏览器设置禁用JavaScript(但一般禁用了js页面很多正常的功能无法运行)
  • 删除JS前端验证处的代码
  • 使用BurpSuite抓包:先把php木马改成jpg后缀上传,经过前端验证之后抓到包修改回php后缀即可

文件类型(MIME)检测绕过

上传一个php文件抓包看看,看到Content-Type显示的是application/octet-stream

接着再上传一个普通的图片看看,变成了image/jpeg

如果服务端通过这个来判断文件类型,那么就可以被绕过,直接抓包修改文件类型即可

文件内容头校验

服务端通过文件内容中的文件头来判断是否是非法上传

同样可以通过抓包修改绕过

这里给出两个好记的文件头

格式

文件头

GIF 

GIF89a
BMP  BM

文件内容<?校验绕过

使用Javascript绕过

<script language="php">
@eval($_POST['test']);
</script>

Apache解析漏洞

在 Apache的解析顺序中,是从右到左开始解析文件后缀的,如果最右侧的扩展名不可识别,就继续往左判断,直到遇到可以解析的文件后缀为止。

例如一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往php的位置开始尝试解析 ,如果ccc不属于Apache能解析的后缀名,那么Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的拓展名为止

Nginx解析漏洞

这个漏洞造成的原因只要是php配置文件中的选项cgi.fi:x_pathinfo
例如/1.txt/1.php 由于1.php是不存在的,就会把1.txt文件当成php文件来执行。

IIS 5.X~6.X解析漏洞

当建立.asp .asa的文件夹时,其目录下的所有文件都会当作asp 文件来解析。

当文件位 .asp;1.jpg时,iis同样会把他当作ASP脚本来执行。



黑名单绕过——.htaccess文件

创建一个名为.htaccess的文件,写入以下代码,上传到目标网站

SetHandler application/x-httpd-php  //方法一:将所有文件解析成php
AddType application/x-httpd-php .png //方法二:将jpg文件解析成php

接着将一句话木马以图片的形式保存,在上传到目标网站,图片将会以php执行  

 

黑名单绕过——.uer.ini文件

.uer,ini跟.htaccess后门比,适用范围更广,nginx/apache/IIS都有效,而.htaccess只适用于apache

首先,构造一个.user.ini文件,内容如下:

GIF89a
auto_prepend_file=test.jpg //指定在主文件之前自动解析的文件的名称,并包含该文件,就像使用require函数调用它一样。

上传到目标网站。接着将一句话木马以图片的形式保存,在上传到目标网站,图片将会以php执行

文件截断%00绕过

截断原理:由于00代表结束符,所以会把00后面的所有字符删除。

截断条件:PHP版本小于5.3.4,PHP的 magic_quotes_gpc为OFF状态。 

修改参数 test.php%00.jpg,文件被保存到服务器时,%00会把“jpg"和按时间生成的图片文件名全部截断,那么文件名就剩下test.php,因此成功上传了 Webshell

大小写/双写绕过

没啥好写如题

图片马

将php文件和jpg文件放一起,打开cmd输入

copy test.php /b + 2.jpg /a 2.png 

或者直接用记事本打开jpg图片,在里面输入一句话木马,即可做出图片马

但是图片马不能直接利用,需要通过文件包含来利用

数据溢出绕过waf

在网上还看到了一个有意思的绕过方法,垃圾数据缓冲溢出

一般文件上传的时候会有这样的格式,就在filename的前面塞大量的垃圾数据,绕过waf,注意垃圾数据后面要加一个分号

文件上传漏洞防御

  • 通过白名单的方式判断文件是否合法
  • 对上传后的文件进行重命名,例如rand(10,99).jpg

WEB漏洞——文件上传的更多相关文章

  1. 24:WEB漏洞-文件上传之WAF绕过及安全修复

    本课重点 案例1:上传数据包参数对应修改测试 案例2:safedog+云服务器+uploadlabs测试 案例3:safedog+云服务器+uploadlabs_fuzz测试 案例4:文件上传安全修复 ...

  2. Web Uploader文件上传插件

    http://www.jq22.com/jquery-info2665   插件描述:WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现 ...

  3. Web Uploader文件上传&&使用webupload有感(黄色部分)

    引入资源 使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF. <!--引入CSS--> <link rel="stylesheet" ...

  4. 七牛云存储的 Javascript Web 前端文件上传

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,七牛云存储的 Web 前端文件上传 七牛是不错的云存储产品,特别是有免费的配额可 ...

  5. web安全——文件上传

    文件上传本身不是漏洞,但如果文件上传功能的限制出现纰漏,允许了不合法且影响网站安全的文件的上传    可以将不合法且影响网站安全稳定性的文件等内容上传的均为“文件上传漏洞”        黑方将文件上 ...

  6. java web(四)文件上传与下载

     一.文件上传原理 1.在TCP/IP中,最早出现的文件上传机制是FTP ,它是将文件由客户端发送到服务器的标准机制:但是在jsp使用过程中不能使用FTP方法上传文件,这是由jsp运行机制所决定. 通 ...

  7. 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传

    第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三 ...

  8. web大文件上传(web应用---SSH框架)

    版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  9. 基于Web的文件上传管理系统

    一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不能这样上传了.我这里分享一下我自己开发的一套大文件上传控件 ...

随机推荐

  1. Yara规则学习

    01 定义 官网: YARA is a tool aimed at (but not limited to) helping malware researchers to identify and c ...

  2. Java 在PPT中插入OLE对象

    PPT幻灯片中支持将文档作为OLE对象插入到PPT幻灯片指定位置,在幻灯片中可直接点击该对象,打开或编辑等.下面以插入Excel工作簿文档为例,介绍如何来插入到幻灯片.   程序运行环境 编译环境:I ...

  3. JStorm:概念与编程模型

    1.集群架构 JStorm从设计的角度,就是一个典型的调度系统,简单集群的架构如下图所示,其中Nimbus可增加一个备节点,多个Supervisor节点组成任务执行集群. 1.1.Nimbus Nim ...

  4. SpringBoot开发七-开发注册功能

    需求介绍-开发注册功能 首先访问注册页面-点击顶部的链接,打开注册页面 提交注册数据 通过表单提交数据 服务端验证账号是否存在,邮箱是否已经注册 服务端发送激活邮件 激活注册账号 点击邮件中的链接,访 ...

  5. 区块链-NFT 的实现原理

    作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. 博客:http://www.cnblogs.com/linguanh/ 掘金:https://juejin.im/user/1785262 ...

  6. epoll水平/边缘触发模式下阻塞/非阻塞EPOLLOUT事件触发条件及次数

    在IO多路复用技术中,epoll默认的事件触发模式为Level_triggered(水平触发)模式,即当被监控的文件描述符上有可读/写事件发生时,epoll_wait()会通知处理程序去读写.如果这次 ...

  7. js随机显示图片

    定义一个图片数组,生成一个随机数对应数据索引. window.onload = choosePic; function choosePic() { var myPix = new Array(&quo ...

  8. SpringBoot整合mybatis快速入门

    一.创建一个SpringBoot项目                 二.引入相关依赖 <!--web核心依赖--> <dependency> <groupId>o ...

  9. 在VS工程中,添加c/c++工程中外部头文件(.h),lib库,dll库的基本步骤

    选择工程,右键-工程属性 其中: VC++目录 -->包含目录,对所有的项目及未来新建的项目都有效 c/c++-->常规-->附加包含目录,仅对当前项目有效 绝对路径设置方法: 在V ...

  10. 消除不受信任的HTML (来防止XSS攻击)

    问题 在做网站的时候,经常会提供用户评论的功能.有些不怀好意的用户,会搞一些脚本到评论内容中,而这些脚本可能会破坏整个页面的行为,更严重的是获取一些机要信息,此时需要清理该HTML,以避免跨站脚本cr ...