文件上传漏洞

0x00前言

指攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。

文件上传漏洞条件

  • 上传的文件能被Web服务器当做脚本来执行
  • 我们能够知道并且访问到上传文件的路径

一般我们会利用文件上传漏洞上传一句话木马,然后用菜刀,蚁剑连接获取 webshell。但是这里有两个问题:

  • 第一你的文件能上传到web服务器
  • 第二你的文件能被当成脚本文件执行,所以要想让上传文件被当成脚本执行,我们经常会和文件包含漏洞和文件解析漏洞一起利用

0x01测试流程

0x02防御手段

 1前端绕过

1.js校验 》》修改源代码/禁用js

也可以使用抓包工具绕过。

2后端校验 

1.内容校验

1.MME类型检测

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型是设定某种扩展名的文件 用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,其实可以理解为多媒体类型,jpg图 片 -- image/jpeg png image/png 浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打 开方式。每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的 种类。

常见的MIME类型(通用型):
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic

2. 代码注入绕过--getimagesize()

方法一:直接伪造头部GIF89A

方法二:CMD方法,copy /b test.png+1.php muma.png

 2.后缀校验

就是对文件后缀名进行判断,那么我们采取两种方式绕过,黑名单和白名单。 黑名单指的是程序员在写代码的时候,有时候会将一些php、jsp等脚本或者代码加入黑名单。白名单是指运行只允许那些通过。

如果是后端黑名单过滤的话,我们可以想尽任何办法绕过黑名单进行上传。比如如果目标服务器是windows系统的话,我们可以利用windows系统的解析漏洞,用burpsuite抓包,将文件名后缀改为 .php. 或者空格.php ,因为在windows系统内是不允许文件以 . 或者空格结尾的。所以在绕过上传之后windows系统会自动去掉 点和空格。所以,该文件最终还是会被解析成 .php 。或者还可以将php三个字母变换大小写,因为在windows系统里面是不区分大小写的。

如果是白名单检测的话,我们可以采用00截断绕过00截断利用的是php的一个漏洞。在 php<5.3.4 版本中,存储文件时处理文件名的函数认为0x00是终止符。于是在存储文件的时候,当函数读到 0x00(%00) 时,会认为文件已经结束。
例如:我们上传 1.php%00.jpg 时,首先后缀名是合法的jpg格式,可以绕过前端的检测。上传到后端后,后端判断文件名后缀的函数会认为其是一个.jpg格式的文件,可以躲过白名单检测。但是在保存文件时,保存文件时处理文件名的函数在遇到%00字符认为这是终止符,于是丢弃后面的 .jpg,于是我们上传的 1.php%00.jpg 文件最终会被写入 1.php 文件中并存储在服务端

0x03服务器解析漏洞

条件有限,这里只能简单列举一下了。

1.iis5.x-6.x解析漏洞

1.目录解析(6.0)
 形式:www.xxx.com/xx.asp/xx.jpg

xx.asp为目录名。
 原理: 服务器默认会把.asp目录下的文件都解析成asp文件。

2.文件解析
 形式:www.xxx.com/xx.asp;.jpg
 原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。
3.解析文件类型

IIS6.0 默认的可执行文件除了asp还包含这三种 :
 /test.asa
 /test.cer
 /test.cdx

2.apache 

 Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把 xx.php.owf.rar解析成php。

 www.xxxx.xxx.com/test.php.php123  就会被解析成php

nginx

当php.ini配置文件中开启了cgi.fix_pathinfo,该值默认为1,表示开启。看名字大概知道是处理路径用的配置。
比如我们上传了一个木马文件web.jpg,因为web.php不能上传,现在我们想执行这个web.jpg,可以访问如下路径访问
http://192.168.2.104/pikachu/web.jpg/aaa.php
而目标服务器上没有aaa.php文件,本来如果nginx.conf的配置没有问题的话,nginx会先去找下这个文件是否存在,如果存在,在找php解释器来解释执行代码,如果不存在,nginx会直接返回错误信息,说找不到该文件,但是如果nginx.conf配置不当会导致nginx把以’.php’结尾的文件交给fastcgi处理,也就是说首先nginx看到你路径中要找aaa.php,哦,原来是php文件,nginx不去找这个文件了,而是就直接交给了fastcgi,fastcgi又去找php解释器去处理该路径,而php开启了cgi.fix_pathinfo,那么php解释器处理这个路径的时候,发现没有aaa.php文件,那么他会找路径中上一层路径的文件作为aaa.php来运行,如是
乎就找到了web.jpg,将web.jpg当作aaa.php来运行了,所以代码被执行,看到如下效果

0x04文件上传靶场

其他绕过姿势请 移步下方链接

upload-labs靶场通关详解(1-15)_uploadlab-CSDN博客

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值