首页 > 其他分享 >文件上传漏洞

文件上传漏洞

时间:2023-01-14 20:12:02浏览次数:60  
标签:文件 解析 后缀 漏洞 服务器 php 上传

文件上传漏洞

一、概要

通常是由于对上传文件的类型、内容没有进行严格的过滤、检查或者过滤被成功绕过,使得攻击者可以通过上传木马获取服务器的webshell权限

1.什么是webshell

非法用户上传恶意脚本文件控制整个网站,甚至控制整台服务器。这个恶意的脚本文件,又被称为webshell,也称作网页后门

二、漏洞成因

1.服务器配置不当

当服务器配置不当时,在不需要上传页面的情况下便可导致任意文件上传,参考HTTP请求方法(PUT)

2.开源编辑器上传漏洞

很多开源的编辑器历史上都有不同的上传漏洞

3.本地文件上传限制被绕过

只在客户端浏览器上做了文件限制而没有在远程的服务器上做限制,只需要修改数据包就可以轻松绕过限制

4.过滤不严或被绕过

有些网站上使用了黑名单过滤掉了一些关键的可执行文件脚本后缀等,但黑名单不全或者被绕过,导致可执行脚本文件被上传到服务器上执行

常用的一些可执行的文件脚本的后缀:Php,php2,php3,php5,phtml,pht,asp,aspx,ascx,ashx,cer,jsp,jspx

5.文件解析漏洞导致文件执行

当服务器上存在文件解析漏洞时,合法的文件名便可导致带有恶意代码的文件被执行

6.文件路径截断

在上传的文件中使用一些特殊的符号,使得文件被上传到服务器中时路径被截断从而控制文件路径

常用的进行文件路径截断的字符如下:\0、?、%00

在可以控制文件路径的情况下,使用超长的文件路径也有可能会导致文件路径截断

三、解析漏洞

解析漏洞是指web服务器因对http请求处理不当导致将非可执行的脚本/文件等当做可执行的脚本/文件等执行。该漏洞一般配合服务器的文件上传功能使用,以获取服务器的权限

1.IIS 5.x/6.0解析漏洞

在网站下建立文件夹的名称中带有asp、asa、cer、cdx等可执行脚本文件后缀为后缀的文件夹,其目录内的任何扩展名的文件都被IIS当作可执行文件来解析并执行

例如,页面允许用户上传文件,也允许用户在服务器上新建文件夹,此时一个用户想上传一个asp木马(服务器禁止上传asp文件),那么该用户只需要新建一个xxx.asp的文件夹,并在文件夹内新建一个txt/图片(无论新建什么),IIS都会把它当作asp脚本执行,如:http://www.xxx.com/xx.asp/xx.jpg

文件解析:在IIS6.0下,分号后面的不被解析,也就是说xx.asp;.jpg将被当做xx.asp解析并执行,例如:http://www.xxx.com/xx.asp;.jpg

IIS6.0 默认的可执行文件有asp、asa、cer、cdx四种

2.IIS 7.0/IIS 7.5 或者 Nginx <0.8.3 畸形解析漏洞

在默认Fast-CGI开启状况下,访问以下网址,服务器将把xx.jpg文件当做php解析并执行
http://www.xxx.com/xx.jpg/.php

3.Nginx <8.03 空字节代码执行漏洞

影响范围:Nginx0.5.,0.6., 0.7 ⇐ 0.7.65, 0.8 ⇐ 0.8.37

访问以下网址,服务器将把xx.jpg文件当做php解析并执行
http://www.xxx.com/xx.jpg.php

4.CVE-2013-4547 Nginx解析漏洞

http://www.xxx.com/a.jpg\0.php
http://drops.wooyun.org/tips/2006

5.Apache解析漏洞

Apache对文件解析是从右到左开始判断解析,如果文件的后缀为不可识别,就再往左判断,解析。 如xx.php.owf.rar,由于Apache无法解析rar和owf后缀,但能够解析php后缀,因此Apache会将xx.php.owf.rar当做php格式的文件进行解析并执行

访问以下网址,服务器将把xx.php.owf.rar文件当做php解析并执行
http://www.xxx.com/xx.php.owf.rar

四、文件上传判断思路

1

五、一句话木马

<?php @eval($_POST['x']); ?>

@的作用:无视报错信息,继续执行后续命令

eval():把括号内的数据转换成指令执行,例:phpinfo();和eval("phpinfo();");的作用是一样的,只不过是执行指令的两种写法

$_POST(超文本传输变量):获取用户的post表单内容

PHP函数(方法)不区分大小写,变量区分大小写【与JS和HTML有区别】,所以不能写成post,但可以写成EVAL

PHP中$开头的都是变量

PHP字符串拼接:'ab' . 'cd' = 'abcd'

六、绕过上传漏洞

1.客户端验证

①浏览器禁用JS---about:config

②使用浏览器插件,比如FireBug之类,删除检测文件后缀的JS代码,然后上传文件即可
绕过

③首先把需要上传的文件的后缀改成允许上传的,如jpg,png等,绕过JS的检查,再抓包,
把后缀名改还原后即可上传成功

2.文件后缀绕过

文件后缀绕过攻击是服务器代码中限制了某些后缀的文件不允许上传。但是有些Apache是允许解析其它文件后缀的,例如在httpd.conf中,如果配置有AddType application/x-httpd-php .php .phtml代码,则能够解析php和phtml文件,所以可以上传一个后缀是phtml的webshell

在Apache的解析顺序中,是从右向左开始解析文件后缀的,如果最右侧的扩展名不可识别,就继续往左判断,直到遇到可以解析的文件后缀为止。所以如果上传的文件名类似 1.php.xxxx,因为后缀xxxx不被识别,所以向左解析后缀php

3.文件类型绕过

如果服务端代码只是通过Content-Type的值来判断文件的类型,那么就存在被绕过的可能。所以当上传一个php文件时,在burp当中将Conten-Type修改为 imag/jpeg,就可以绕过服务器的检测

PHP函数getimagesize()可以获得图片的宽、高等信息,如果上传的不是图片文件,那么此函
数就得不到相关信息,则不允许上传。我们可以将一个图片和一个webshell合并为一个文件(图片码),此时,该函数就可以获取图片信息,且webshell的后缀是php,也能被Apache解析为脚本文件,通过这种方式就可以绕过此函数的限制

4.服务端验证

①黑名单验证

Ⅰ.攻击者可以从黑名单中找到web开发人员忽略的扩展名,如:cer

Ⅱ.文件扩展名大小写转换,aSp、phP,此类扩展名在Win平台依然会被web容器解析

Ⅲ.在Win系统下,如果文件名以“.”或者空格作为结尾,系统会自动去除“.”与空格,利用此特性也可以绕过黑名单验证。如:上传“asp.”或者“asp ”服务器端接收文件名后在写文件操作时,Windows将会自动去除小数点和空格

Ⅳ.%00截断

②白名单验证

配合解析漏洞,例如:WEB容器是IIS6.0,上传验证为白名单的JPG格式test.asp;test.jpg就可以通过验证,但IIS6.0却会把文件当成test.asp脚本来执行

③MIME验证

修改HTTP请求中的 Content-Type,如修改为:image/jpeg

5.竞争条件

一些网站上传文件的逻辑是:先允许上传任意文件,然后检查上传的文件是否包含WEBSHELL脚本,如果包含则删除该文件。这里存在的问题是上传成功后和删除文件之间存在一个短的时间差(因为要执行检查文件和删除文件的操作)。攻击者就可以利用这个时间差完成竞争条件的上传漏洞攻击

攻击者先上传一个WEBSHELL脚本10.php,10.php的任务是生成一个新的WEBSHELL脚本shell.php

10.php的代码如下:<?php fputs(fopen('../shell.php', 'w'), '<?php @eval($_POST[a]) ?>'); ?>

PHP中提供了一个叫做eval()的函数,如一句话木马就是使用了这个函数,eval()函数可以把字符串按照PHP代码来执行,就是可以动态执行PHP代码

七、漏洞修复

1.服务器配置不当

重新配置好服务器

2.开源编辑器上传漏洞

若新版编辑器已修复漏洞,请更新编辑器版本

3.本地文件上传限制被绕过

在服务器后端对上传的文件进行过滤

4.过滤不严或被绕过

建议使用白名单的方法判断文件后缀是否合法

5.文件解析漏洞导致文件执行

升级web服务器版本或安装相应的官方补丁

6.文件路径截断

对上传后的文件进行重命名,例如 rand(10,99).date("YmdHis").".jpg",使用随机数改写文件名和文件路径,不要使用用户定义的文件名和文件路径

除了以上的方法之外,还可将被上传的文件限制在某一路径下,并在文件上传目录禁止脚本解析

标签:文件,解析,后缀,漏洞,服务器,php,上传
From: https://www.cnblogs.com/vinslow/p/17052459.html

相关文章

  • 文件 字节流
    2、文件读取字节流FileStreamfs= new FileStream(filename,FileMode.Open,FileAccess.Read);byte[]infbytes= new byte[(int)fs.Length];fs.Read(infbytes,0,......
  • 文件相关信息,时间相关操作,定时任务,paramiko模块
    文件相关信息查看文件大小与删除大文件#查看普通⽂件⼤⼩⽅法[root@jason/tmp]#ls-lh/etc/services#查看⽬录⽂件⼤⼩⽅法du显示⽬录中的数据真实占⽤磁盘......
  • ⽹络不通排查流程,各个目录下的重要文件,文件权限及用户、用户组情况
    ⽹络不通排查流程1.确认⽹关地址是否通畅2.确认⽹卡配置是否正确3.确认⽹络管理服务关闭systemctlstopNetworkManagersystemctldisableNetworkMana......
  • 使用ffmpeg合并多个ts文件
    使用ffmpeg合并多个ts文件需求来源在海康的行车记录仪上录制的视频为每分钟一个ts文件,在手机上最多也就可以设置为3分钟,并且在APP只能一下导出5个文件,所以我就将内存卡拔......
  • Python常用文件操作程序
    批量修该文件名。importos#导入模块filename='./2212144sep'#文件地址list_path=os.listdir(filename)#读取文件夹里面的名字st=#写入开始forindexin......
  • 【转】pageoffice在线打开word文件加盖电子印章
    一、加盖印章的js方法js方法二、常见使用场景1、常规盖章。弹出用户名、密码输入框,选择对应印章。点击盖章按钮弹出用户名密码登录框,登录以后显示选择电子印章。do......
  • 22 视频文件摄像头使用
    22视频文件摄像头使用opencv知识点:VIdeoCapture类读取视频/相机-三种方式读取视频帧-两种方式本文所解决的问题:如何读取视频/相机?如何读取视频帧?本......
  • QT学习笔记01——exe文件打包
    第01步.通过QTcreator生成exe文件程序书写没问题后,通过运行按键生成exe文件,例如test.exe。第02步.打开QT专用命令窗口,QT软件安装时已自动安装。找到QT专用命令窗口......
  • Error: ENOSPC: System limit for number of file watchers reached, watch '文件路径
    在Linux系统上运行vue项目。出现如题报错代码的解决办法,在终端执行以下命令最简单的命令,粘贴执行,即可解决!sudosysctlfs.inotify.max_user_watches=524288执行这两条......
  • 漏洞免费实战部分-安卓应用漏洞学习case5
    前期回顾漏洞免费实战部分-安卓应用层getLastPathSegment函数问题漏洞实战部分2-安卓应用ZipEntry对象问题实战漏洞实战部分3-ContentProvider组件的openFile接口问题......