文件上传常见绕过方式

文件上传

检测机制

客户端检测

一般是在网页上写一段js脚本,用js脚本去检测,校验文件的后缀名,有白名单或黑名单

绕过方式:可以通过抓包来修改文件后缀名来绕过前端验证或者通过关闭js尝试绕过

服务端检测

就是在后端代码中写入有关文件检测机制的代码

常见手段

  • 检测Content-Type(内容类型)
  • 检查后缀(主流)
  • 检查文件头

php文件上传的相关函数

$_FILES['myFile']['name'] 客户端文件的原名称。 
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。 
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。 
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量) 
trim() — 去除字符串首尾处的空白字符(或者其他字符)
strrchr — 查找指定字符在字符串中的最后一次出现,返回字符串的一部分
substr(string $string, int $offset, ?int $length = null)---返回字符串 string 由 offset 和 length 参数指定的子字符串。
stripos — 查找字符串首次出现的位置(不区分大小写)
getimagesize() 函数将确定任何支持的指定图像文件的大小,并返回尺寸以及文件类型和 height/width 文本字符串,以在标准 HTML IMG 标签和对应的 HTTP 内容类型中使用。
imagecreatefromjpeg()--创建一块画布并且从GIF文件或者URL地址载入一副画像

绕过机制

文件类型绕过

  1. 直接使用图片马,之后抓包修改文件后缀名为.php

在txt中写一个一句话木马,找一张图片放在一个文件夹中,使用cmd打开

将a.jpg和1.txt合并为123.jpg

copy a.jpg/b + 1.php/a 123.jpg
  1. 直接写一个一句话木马之后抓包修改Content-Type

补充知识

png图片文件包括8个字节:89 50 4E 47 0D 0A 1A 0A

jpg图片文件包括2个字节:FF D8

GIF图片包含6个字节; 47 49 46 38 39|37 61即为GIF89(7)a

不靠谱的黑名单

若有一些不靠谱的黑名单的话,除了php后缀会被解析为php文件,在默认状态下,php3,php4,php5,phtml都是会被解析为php的

.htaccess绕过

.htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令。
.htaccess主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。
.htaccess的用途范围主要针对当前目录。

注意:Apache默认是不开启的


可以先上传一个.htaccess文件,编写一个将.jpg文件当作php文件的命令

AddType application/x-httped-php .jpg

之后上传一个图片码

大小写绕过

不用多说,懂得都懂

文件后缀加空格绕过

有些后端没有对文件名的进行去除空格处理,而黑名单中又没有对这样的文件后缀名过滤,当我们上传一个类似于111.php 的文件这样就会成功上传成功到服务器的目录中

在服务器的目录中,这个111.php 会被系统自动去除空格变为111.php,从而成功被当作一个php文件

image-20240728112139431

image-20240728112333708

文件后缀加.绕过

与上一个方法类似,上传一个111.php.会绕过黑名单机制,同时在服务器目录中,会自动去除后面那个.

::$DATA绕过

这是Windows下NTFS文件系统的一个特性,即NTFS文件系统的存储数据流的一个属性 DATA 时。当我们访问a.asp:: D A T A 时,就是请求 a . a s p 本身的数据,如果 a . a s p 还包含了其他的数据流,比如 a . a s p : l a k e 2. a s p ,请求 a . a s p : l a k e 2. a s p : : DATA时,就是请求 a.asp 本身的数据,如果a.asp 还包含了其他的数据流,比如 a.asp:lake2.asp,请求 a.asp:lake2.asp:: DATA时,就是请求a.asp本身的数据,如果a.asp还包含了其他的数据流,比如a.asp:lake2.asp,请求a.asp:lake2.asp::DATA,则是请求a.asp中的流数据lake2.asp的流数据内容。

我们可以利用这个windows特性,在文件后缀名中添加::$DATA,进行绕过黑名单,当然在服务器的目录中是会去除::$DATA恢复文件本身

构造文件后缀绕过

这个方法是利用了有些过滤它只进行一次,而不是循环过滤

下面的依次从上往下进行执行

image-20240728115001474

当我我们输入111.php. .先是去除末尾的点变为111.php. 之后去除首尾空格变为111.php.,进而绕过黑名单实现文件上传

双写绕过

.pphphp的后缀名,当有些机制会将php转为空,那么.pphphp就会变为.php实现绕过

%00截断或00截断

了解%00前先了解0x00,0x00实际上是一个十六进制表示方式,实际上就是表示ASCII码值为0,有些函数在处理这个字符的时候会把这个字符当作结束符

%00和00截断原理是一样的,只不过%00是经过url编码的,%00解码之后就是0x00截断了

在POST传参是不会进行 url解码的,GET传参会进行url解码,所以在POST传参时使用0x00

使用条件

  • php版本小于5.3.29
  • magic_quotes_gpc=Off

IIS 6.0解析漏洞

  1. IIS6.0除了将ASP后缀当作ASP进行解析的同时,当后缀名为.asa, .cer, .cdx也会当作asp去解析,这是因为IIS6.0在应用程序拓展中默认设置了.asa, .cer, .cdx都会调用asp,dll

  2. test.asp;.jpg会当作asp进行解析

test.asp/123.jpg会当作asp进行解析

​ 比如请求/aaa.asp;xxx.jpg

​ 从头部查找.号,获取.asp;xxx.jpg

​ 查找分号,如果有则截断

​ 查找/,如果有则截断

​ 最后将保留的.asp字符串,反馈给了asp.dll处理

CGI解析漏洞

Ngnix默认是以CGI的方式支持PHP解析,如果cgi.fix_pathinfo=1(默认是开启的),当访问一个xxx.com/php.jpg/.php,会将这个php.jpg当作php文件执行

当然在IIS7.0、IIS7.5、 Lighttpd等web容器中会经常出现这样的解析漏洞

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传漏洞是指攻击者通过上传恶意文件的方式绕过应用程序的安全机制,将恶意文件上传到服务器上,从而实现攻击目的。常见文件上传漏洞绕过方式包括以下几种: 1. 修改文件类型:攻击者可以修改上传文件的文件类型,将恶意文件伪装成常见文件类型,绕过检测机制。 2. 绕过文件类型检测:上传文件时,应用程序会检测文件类型,如果上传的文件类型不符合要求,则会拒绝上传。攻击者可以通过修改 HTTP 头部信息或者使用特殊字符等方式绕过文件类型检测。 3. 绕过文件大小限制:应用程序通常会限制上传文件的大小,攻击者可以通过分割文件、压缩文件等方式绕过文件大小限制。 4. 绕过文件路径检测:应用程序会检测上传文件的路径,如果路径不符合要求,则会拒绝上传。攻击者可以通过构造特殊的路径,绕过文件路径检测。 5. 绕过文件名检测:应用程序会检测上传文件的文件名,如果文件名不符合要求,则会拒绝上传。攻击者可以通过构造特殊的文件名,绕过文件名检测。 为了避免文件上传漏洞的攻击,应用程序开发人员可以采取以下措施: 1. 对上传文件进行严格的类型、大小、路径、文件名检测,确保上传的文件符合要求。 2. 对上传文件进行病毒扫描和安全检测,确保上传的文件不包含恶意代码。 3. 限制上传文件的存储路径,确保上传的文件不会对系统造成危害。 4. 对上传文件进行权限控制,确保只有授权的用户才能访问上传的文件。 5. 定期更新应用程序和服务器的安全补丁,确保系统处于最新的安全状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值