详解文件上传漏洞

介绍

在现代互联网网站中,上传文件基本上是一种常见的功能,允许用户上传一些图片,视频以及其他类型的文件。如果网站出现文件上传漏洞,那么恶意用户就可以将可执行脚本程序上传到web服务器中,获得网站权限,进一步 gongji web服务器。
当上传文件时,如果服务端未对客户端上传的文件进行严格的验证和过滤,就容易造成文件上传漏洞,即上传任意文件(包括脚本文件php,jsp,asp,aspx等格式)
恶意用户可以利用上传的webshell控制整个网站甚至控制服务器

绕过

js检测绕过
js检测绕过漏洞常见于用户上传文件时,如果后缀不允许,则弹窗告知,此时上传文件的数据包并没有上传到服务端,只是在客户端浏览器使用JavaScript进行检测

此时有两种方法进行绕过
1.使用浏览器插件删除检测文件后缀的JavaScript代码,然后上传文件
2.先把需要上传的文件后缀改为允许上传的后缀绕过JavaScript代码的检测,再抓包修改为原来的后缀即可成功


可以看到成功绕过js检测上传文件成功
文件后缀绕过
文件后缀绕过是服务端限制了某些后缀的的文件不允许上传,but 有些Apache是允许解析其它文件后缀的,例如在Apache配置文件httpd.conf中有以下代码则能够解析php和phtml文件
AddType application/x-httpd-php .php .phtml



在Apache解析顺序中是从右到左开始解析文件后缀的,如果最右侧的扩展不识别就继续往左判断,直到遇到可以解析的文件后缀为止,所以如果上传的文件名类似为luguo.php.xxx,因为后缀xxx不可以解析则向左解析为luguo.php
文件类型绕过
此类绕过需要简单的两次判断
用burp suite抓包
当上传php文件时

可以看到数据包中的Conetent-Type的值是application/x-php
上传jpg文件时

可以看到数据包中的Content-Type的值是image/jpeg
可以推断出服务端是通过Content-Type的值来判断文件的类型,那么就可以进行绕过了,因为Content-Type的值是通过客户端传递的,是可以进行修改的,我们只需要在上传php文件时,在Burp suite中将Content-Type修改为image/jpeg,就可以绕过检测

在php中还有一种文件上传漏洞,php调用函数getimagesize()获取图片长宽高等信息,如果上传的不是图片那么getimagesize()就获取不到信息则不允许上传,but 我们可以将图片和webshell合并成一个文件,敲下方命令
cat index.png luguo.php > snowwolf.php


访问上传的地址,上传成功
文件截断绕过
在php中00代表结束符,所以会把00后面的所有字符删除
截断条件php版本小于5.3.4,php的magic_quotes_gpc为off

上传文件时服务端将Get参数name的内容为文件名的前一部分,后面则按时间生成的图片为第二部分
修改参数截断为luguo.php%00.ipg,文件保存到服务器时,%00会把.jpg和按时间生成的图片名全部截断,文件名就剩下luguo.php,因此成功上传webshell
竞争条件绕过
一些网站的逻辑是先允许上传任意文件,然后检查是否包含webshell脚本,如果包含则删除。这里存在的漏洞是文件上传成功后和删除操作有个时间差,恶意用户利用时间差就可以完成竞争条件的gongji。
gongji者先上传一个webshell脚本snowwolf.php,snowwolf.php是生成一个新的webshell脚本,内容如下
<?php
fputs(fopen(‘../shell.php‘,‘w‘),‘<?php @eval($_POST[a]) ?>‘);
?>



当snowwolf.php上传成功时,gongji者立即访问snowwolf.php,则会在服务端立即生成shell.php文件,完成gongji


可以看到已经生成shell.php文件
ps:单身多年的手速可算派上用场了

修复建议

通过白名单的方式来判断文件后缀的合法
对用户上传的文件重命名

文件上传漏洞网页演示源码链接:https://pan.baidu.com/s/1V5b7_FvQjd4yKdaoDbBXCw
提取码:5i89

原文地址:https://blog.51cto.com/superwolf/2361156

时间: 2024-08-29 19:59:32

详解文件上传漏洞的相关文章

Web应用安全之文件上传漏洞详解

什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这样的攻击.文件上传为什么会是漏洞呢?文件上传本身是没有问题的,问题是文件上传后看服务器怎么来处理,怎么来解析这个文件.如果说服务器处理的模式不够安全,那么就会导致严重的后果,也就是上传了恶意的可执行文件以后,服务器端对此文件进行执行. 文件上传后导致的安全问题 上传的文件是web脚本语言,服务器的w

PHP漏洞全解(九)-文件上传漏洞

本文主要介绍针对PHP网站文件上传漏洞.由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP解释器,就可以在远程服务器上执行任意PHP脚本,即文件上传漏洞. 一套web应用程序,一般都会提供文件上传的功能,方便来访者上传一些文件. 下面是一个简单的文件上传表单 <form action="upload.php" method="post" encty

DVWA 黑客攻防实战(五)文件上传漏洞 File Upload

说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映射不到 jsp 文件,同事怀疑是攻击者上传了个 webshell 文件然后进行批量重命名了. 把后台的代码都找了一遍,后台代码也都有验证文件扩展名的,后面是发现一张普通的照片其实是代码来的,但也不知道为何能够执行.但看完这篇文章你就会明白了. 下面用 dvwa 来演示如何攻击和防御. 低级 用户界面

owasp文件上传漏洞简析

0x01: 文件上传漏洞起因于,上传程序没有对上传文件格式进行正确判断,导致可执行程序上传到网站目录. 常见的验证上传文件有两种:1.js本地验证,通过js获取上传文件后缀名,并和白名单比较,匹配则上传成功.由于js代码是本地验证,存在绕过风险(去除js代码,构造表单数据,直接绕过). 2.后端程序验证,通过post数据到file_upload()函数,$_FILES['file']['type']判断上传程序后缀名. function file_upload(){ $file_name = $

文件上传漏洞攻击与防御

前言 从一年前开始学习web安全以来,一直都是在吸收零碎的知识,不断地看书与一些前辈的文章,中间也经过一些实践,学习相关的工具,但是却没真真正正地在脑中形成一套完整的体系.从不久前就想着要写一些博客,趁着这个机会,便好好梳理一下所学的知识,只是这些文章所写大部分内容也是搬运前辈的文章,鲜有自己所想所悟. 关于文件上传漏洞,百度一下便有许多文章出来,在这里我也稍稍做整理. 0x00 文件上传漏洞所需满足的条件 一是文件可上传(感觉这一句是废话).二是上传文件路径可知,如果路径不可知就没法访问,亦无

《白帽子讲WEB安全》学习笔记之第8章 文件上传漏洞

第8章 文件上传漏洞 8.1 文件上传漏洞概述 文件上传漏洞是指用户上传一个可执行的脚本文件,并通过此脚本文件活动执行服务器端的能力. 原理:由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件. 文件上传漏洞安全问题: q  上传文件是WEB脚本文件,服务器的WEB服务器解释并执行了用户上传的脚本,导致代码执行: q  上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行

文件上传漏洞原理与实例测试

0x00 什么是文件上传 为了让用户将文件上传到网站,就像是给危机服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率.企业支持门户,给用户各企业员工有效地共享文件.允许用户上传图片,视频,头像和许多其他类型的文件.向用户提供的功能越多,Web应用受到攻击的风险和机会就越大,这种功能会被恶意用户利用,获得到一个特定网站的权限,或危及服务器的可能性是非常高的. 0x01 为什么文件上传存在漏洞 上传文件的时候,如果服务器脚本语言

【原创】JEECMS v6~v7任意文件上传漏洞(1)

文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定.安全.高效.跨平台等多方面的优点:采用SpringMVC3+Spring3+Hibernate3+Freemarker主流技术架构.广泛应用于政府(部委和省级政府部门.市.县.乡及委办局).教育科研(大.中.小学及各地方教育局).电信运营商.金融(证券.保险及银行).企业(矿业.煤炭.旅游.石油集

文件上传漏洞原理以及防范

1. 什么是文件上传漏洞 程序员由于没有对上传的文件进行严格限定,导致黑客可以通过工具上传其他格式的程序文件(比如:webshell),这样黑客就会拿到一个可执行环境,在服务器上搞破坏. 一个常见的例子,很多网站存在上传图片的功能,如果不对上传图片的扩展名进行检测.过滤就会造成上传漏洞. 2. 如何防范上传漏洞 步骤:前端JS代码限定--->后台代码检测--->取消文件目录执行脚本的权限. 以如何防范图片上传漏洞做个过程分析: 新建一个解决方案: 2.1 第一步前端用JavaScript对上传