文件上传漏洞详解

目录

文件上传漏洞概念

Webshell

文件上传漏洞

前提条件

文件检测的方式

客户端检测

服务端检测

实例

服务端检测里的白名单MIME检测

绕过技巧

 服务端检测之黑名单检测

绕过技巧

服务端检测之白名单检测

绕过技巧


文件上传漏洞概念

上传文件的时候,如果服务器端后端语言未对上传的文件进行严格的验证和过滤,就容易造成上传任意文件的情况。常见的场景是web服务器允许用户上传图片或者普通文本文件保存,而攻击者绕过上传机制上传恶意代码文件并执行从而控制服务器。这个恶意的代码文件又被称为webshell。

Webshell

webshell就是以aspphp、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理服务器管理权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的。(这段话摘抄自百度)

文件上传漏洞

前提条件

  • 能上传webshell
  • webshell路径可知
  • webshell可以被访问
  • webs可以被解析

文件检测的方式

客户端检测

客户端检测一般都是在网页上写一段JavaScript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。

判断方式:在浏览加载文件时,点击上传按钮时弹出对话框,内容如:只允许上传.jpg/.png/.jpeg后缀名文件,而此时并没有发送数据包。

绕过技巧:在本地浏览器客户端禁用JS:可以使用火狐浏览器的Noscript插件、浏览器禁用JS等方式绕过。也可以通过在控制台处寻找到return CheckFile()函数并且删除来达到绕过,如upload靶场的第一关:

上传一句话木马,打开后台控制器,找到如图函数之后删除,最后点击上传,发现上传成功

 

 接着去连接蚁剑或其他webshell工具查看是否成功即可

服务端检测

服务端检测就是网站对用户上传的文件的检测代码放置在服务器里,当用户上传的文件通过了检测才会被允许保存在服务器里。

检测类型:

  • 检测后缀(黑名单检测、白名单检测)
  • 检查内容
  • 代码逻辑

实例

服务端检测里的白名单MIME检测

MIME是描述消息内容类型的因特网标准。用来表示文档、文件或字节流的性质和格式。在http数据包中里的Content-Type字段显示。

超文本标记语言.html文件:text/html

普通文本.txt文件:text/plain

PDF文档.pdf:application/pdf

PNG图像.png:image/png

GIF图像.gif:image/gif

JPEG图像.jpeg、.jpg:image/jpeg

MPEG文件.mpg、.mpeg:video/mpeg

绕过技巧

利用burp截取并修改数据包中的Content-Type字段的值为正常值从而进行绕过。如upload靶场的第2关:

首先上传一个php文件,看看是什么类型的报错,可以发现此题为服务器端校验

 重新上传,在点上传之前对其进行抓包,可以看到16行处有个content-type函数,对其参数进行更改,可以更改为image/jpeg,image/png等参数(主要以源码为准),然后进行上传,上传成功

 

 服务端检测之黑名单检测

黑名单是有限的,可以随意构造一个文件后缀,如果可以上传,则说明是黑名单检测,反之为白名单检测。

绕过技巧

  • 后缀双写绕过
  • 后缀大小写绕过
  • 其它可解析后缀绕过
  • 图片+配置文件绕过

下面来讲解一下其他可解析后缀绕过

更改Apache的配置项AddType application/x-httpd-php .php .phtml,然后上传.phtml文件(后面也可以加其他类型的)

也可以通过在后缀名处加::$DATA绕过,原因是在Window的时候如果后缀名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,它的目的就是不检查后缀名。

如upload靶场里的第3关

首先我们查看一下源码。可以发现为黑名单检测

又由源码我们可以看到不支持大小写绕过,且去除了::$DATA,但是我们发现我们可以利用双写::$DATA去绕过,接下来让我们去尝试一下是否能成功

首先对上传页面进行抓包,然后在filename处对文件名进行双写::$DATA

 点击上传,发现上传成功,查看一下是否能解析成功,发现解析成功

 

服务端检测之白名单检测

上传一张图片与上传一个自己构造的后缀,如果只能上传图片不能上传其他后缀文件,说明是白名单检测。

绕过技巧

 可以利用00截断的方式来进行绕过,包括%00截断与0x00截断。除此之外绕过网站存在文件包含漏洞,还可以文件包含+图片马进行绕过

为什么可以用00截断来绕过?

%00是一个URL编码,URL发送到服务器后就被服务器解码。这时还没有传到验证函数,也就是说验证函数里接收到的不是%00字符,而是%00解码后的内容,即解码为00x0。在URL中%00表示ASCII码中的0,而ASCII码中的0会被作为特殊字符保留,表示字符串结束,所以当URL中出现%00时就认为读取结束,从 而达到绕过。

前提:

php:php<5.3.29且magic_quotes_gpc=off

java:jdk<JDK1.7.0_40

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值