文件上传漏洞(File Upload)

摘要:
5)黑名单校验文件后缀名寻找遗漏文件类型绕过6)其他绕过方法00截断后缀名大小写绕过条件竞争解析漏洞总结:上传绕过方法要灵活运用,不能死板,可以多种方法结合以达到上传效果实验实验环境:phpstudy2016靶机:DVWAfileuploadHIGH安全级别源码可知,此等级采用了白名单过滤,只允许后缀名为jpg,jpeg或png格式的文件上传,并且文件大小要小于100000字节。
简介

File Upload,即文件上传漏洞,通常是由于对用户上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马,病毒,恶意脚本等获取服务器的webshell权限,并进而攻击控制服务器,因此文件上传漏洞带来的危害常常是毁灭性的。简单点说,就是用户直接或者通过各种绕过方式将webshell上传到服务器中进而执行利用。例如,如果你的服务器为php环境,用户上传了一个php一句话木马,并通过菜刀连接获取webshell,就可能对你的服务器文件进行篡改甚至执行命令。

文件上传校验方法

客户端javascript校验(一般只校验后缀名)

当客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,前端的 js 脚本就对文件的扩展名进行检测来判断是否是可以上传的类型

服务端校验

  • 文件头content-type字段校验 后端通过对上传文件的MIME类型进行黑白名单检测过滤
  • 文件内容头校验

不同的文件都有不同的文件头,文件头就是为了描述一个文件的一些重要的属性,它告诉了打开并处理该文件的程序这些属性。有些上传接口会检测你上传的文件头信息以此来判断是否为正真的文件类型,比如 jpg 格式图片头部是 JFIF ,gif头部是GIF89a,png头部是%PNG。

  • 校验文件大小

一些上传接口通过函数比如 getimagesize() 函数检测你上传的图片的大小是否是正常的图片大小,防止上传一句话木马。

  • 后缀名黑名单校验
  • 后缀名白名单校验
  • 自定义正则校验

WAF设备校验

(根据不同的WAF产品而定)

绕过姿势

1)客户端校验

  • 先将所上传文件扩展名改为符合脚本检测规范的拓展名,在上传时通过burpsuite抓包,将数据包中文件的拓展名还为原来的,以达到绕过的目的
  • 在本地浏览器中直接禁用JS

2)文件头content-type字段校验

使用burpsurite或firebug等篡改http header中Content-Type的内容,即将Content-Type: application/php改为其他web程序允许的类型,如Content-Type: image/jpg,Content-Type: image/png,Content-Type: text/plain。

常见MIME类型:

text/plain(纯文本)

text/html(HTML文档)

text/javascript(js代码)

application/xhtml+xml(XHTML文档)

image/gif(GIF图像)

image/jpeg(JPEG图像)

image/png(PNG图像)

video/mpeg(MPEG动画)

application/octet-stream(二进制数据)

application/pdf(PDF文档)

application/(编程语言) 该种语言的代码

application/msword(Microsoft Word文件)

message/rfc822(RFC 822形式)

multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)

application/x-www-form-urlencoded(POST方法提交的表单)

multipart/form-data(POST提交时伴随文件上传的表单)

3)文件内容头校验

  • 在上传的脚本的头部加上相应的文件头字节(php引擎会将 <?之前的内容当作html文本,不解释而跳过之,后面的代码仍然能够得到执行)

附一张各种格式文件内容头表

  • 找一个符合上传过滤类型的文件与脚本文件合并制作图片木马,后将新文件上传,再结合文件包含漏洞getshell

4)校验文件大小

在上传数据里不断填充垃圾数据或制作图片木马进行绕过。

5)黑名单校验文件后缀名

寻找遗漏文件类型绕过

6)其他绕过方法

  • 00截断
  • 后缀名大小写绕过
  • 条件竞争
  • 解析漏洞

总结:上传绕过方法要灵活运用,不能死板,可以多种方法结合以达到上传效果

实验

实验环境:phpstudy2016

靶机:DVWA file upload HIGH安全级别

文件上传漏洞(File Upload)第1张

源码

文件上传漏洞(File Upload)第2张

可知,此等级采用了白名单过滤,只允许后缀名为jpg,jpeg或png格式的文件上传,并且文件大小要小于100000字节。

在cmd中用copy命令生成图片木马

文件上传漏洞(File Upload)第3张

发现一句话木马一插入图片尾部

文件上传漏洞(File Upload)第4张

上传成功

文件上传漏洞(File Upload)第5张

可见文件位于C:phpstudyWWWDVWAhackableuploads目录下

尝试用菜刀连接

发现出现错误,因为木马被当作图片解析而不被当作php解析

此时可利用文件包含漏洞

文件上传漏洞(File Upload)第6张

利用DVWA的File Inclusion漏洞来将图片解析为php

构造url

http://169.254.16.216/DVWA/vulnerabilities/fi/?page=file:///C:phpstudyWWWDVWA/hackable/uploads/shell.jpg 添加到菜刀 参数为qlu

文件上传漏洞(File Upload)第7张

连接发现错误,这是为DVWA需要登陆

可以右键点击刚添加的shell,选择浏览网址,在菜刀自带的浏览器中登陆DVWA将安全等级设为high及以下.

文件上传漏洞(File Upload)第8张

然后就可以成功连接.

防护

1.文件上传的目录设置为不可执行

只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

2.判断文件类型

在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

3.使用随机数改写文件名和文件路径

文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

4.单独设置文件服务器的域名

由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

免责声明:文章转载自《文件上传漏洞(File Upload)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows 搭建WAMP+MantisC++将类的构造函数、析构函数声明为private或者protected的用途下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

3.13通达OA任意文件上传+包含复现分析

3.13通达OA任意文件上传+包含复现分析 简述 通达OA是北京通达信科科技有限公司出品的 "Office Anywhere 通达网络智能办公系统"。 3月13日,通达OA在官方论坛发布通告称,近日接到用户反馈遭到勒索病毒攻击,提示用户注意安全风险,并且于同一天对所有版本发布了加固补丁。 在受影响的版本中,攻击者可以在未认证的情况下向服务器上传jpg图片文...

Flask(Jinja2) 服务端模板注入漏洞vulhub

Flask(Jinja2) 服务端模板注入漏洞vulhub 前言 Flask简介 Flask 是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序。这个 web 应用程序可以是一些 web 页面、博客、w...

海明码距离及检错纠错问题和CRC校验

海明校验码 两个长度相等的字符串的海明距离是在相同位置上不同的字符的个数,也就是将一个字符串替换成另一个字符串需要的替换的次数。海明距离与检错和纠错的关系: 1.海明距离为d+1的编码能检测出d位差错。 因为在距离为d+1的检验码中,只改变d位的值,不可能产生另一个合法码。如奇偶校验码,海明距离为2,能查出单个错。 2.海明距离为2d+1的编码,能纠正d位...

用友GRP-u8 注入-RCE漏洞复现

​ ​用友GRP-u8 注入-RCE漏洞复现 (HW第一时间复现了,当时觉得不合适,现在才发出来) 一、漏洞简介 用友GRP-u8存在XXE漏洞,该漏洞源于应用程序解析XML输入时没有进制外部实体的加载,导致可加载恶意外部文件。 二、漏洞复现 SQL注入POC POST /Proxy HTTP/1.1Host:localhost:8080Upgrade-...

【大话存储】学习笔记(4,5章),RAID

RAID 上一章介绍了磁盘的基本原理,我们知道一块磁盘的容量和速度是有限的,对于一些应用来说,可能需要几个TB的大小的来存放数据,我们必须要制造更大单盘容量的磁盘吗?实际上,可以使用多块磁盘并行起来解决这个问题,这就是RAID技术。 RAID:独立的磁盘组成具有冗余特性的阵列。Redundant Array of Independent Disks n...

sudo漏洞解决方案--源码转rpm包(spec文件编写)

RPM 知识储备   将源码包打包成rpm包,一般有两种情况 在找包中,能够在网上找到 “.src.rpm” 结尾的包,并且是根据漏洞需要升级的版本的包 在找包中,没有找到 “.src.rpm” 结尾的包 ,软件包官网只提供源码包和二进制包,需要自己来写spec文件来打成rpm包   !!本章只对第二种做举例与分析!!   若要构建一个标准的 RPM...