web-文件上传

什么是文件上传?

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

下面为看官们介绍几种常见的思路

后缀名

文件上传关于后缀名这方面主要是黑名单和白名单。

黑名单:禁止上传的文件后缀名

白名单:仅限于允许上传的文件名

黑名单

1.特殊解释后缀(apache)

添加特殊的文件后缀名,让服务器将其理解为php进行解析,如phtml,php5等文件的后缀名

使用方法:

“打开配置文件”--->“httpd-conf”

在配置文件中找到“#AddType application/x-httpd-php .php .phtml”所在行,去除此行#注释符并在末尾添加.phtml .php3即可

2 .htaccess配置文件(apache)

htaccess是超文本访问(Hypertext Access)的缩写,是一个基于Apache的Web服务器使用的配置文件,用于控制它所在的目录以及该目录下的所有子目录。

通过上传此文件可以让文件按照php方式解析

<FilesMatch "yimo37">
Sethandler application/x-httpd-php

.user.ini配置文件也可以做到这种效果

GIF89a
auto_prepend_file=shell.jpg

3.结尾加空格

在windows环境下文件后缀名+空格可以视为没有文件没有变动,如1.txt 和1.txt是同一个文件,在提交文件时可以加空格来绕过文件后缀名检查机制

4. ::$DATA

在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

例如:"phpinfo.php::$DATA"Windows会自动去掉末尾的::$DATA变成"phpinfo.php"

5.多次过滤

对于一些关键字如php,一些网站可以进行过滤,若只过滤一次可以通过

index.php

index.pphphp

如果只过滤一次则会变成 index.p+''+hp,如果多次可以继续重叠

白名单

%00截断

例如添加空字节注入(shell.php%00.gif),或使用双重扩展来上传文件(shell.jpg.php)。

修改MIME文件

通过抓包修改文件参数

apache解析漏洞

未知扩展名解析漏洞

Apache的解析漏洞依赖于一个特性: Apache默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别(不在mime.types文件内),则 继续向左识别,直到识别到合法后缀才进行解析。

复现: 这里使用phpstudy进行复现。 下载地址: http://phpstudy.php.cn/phpstudy/phpStudy(PHP5.2).zip

访问phpinfo.php.xxx  

实战中可以上传rar,owf等文件进行利用,如果上传phpinfo.php.jpg,即使文件名中有.php,也会直接解析为jpg。因为Apache认识.jpg,停止继续向左识别  

AddHandler导致的解析漏洞。

如果运维人员给.php后缀增加了处理器: AddHandler application/x-httpd-php .php 那么,在有多个后缀的情况下,只要一个文件名中含有.php后缀,即被识别成PHP文件,没必要是最后一个后缀。 利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。  

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

影响范围:2.4.0~2.4.29版本 环境:phpstudy2014 Apache + PHP5.4n 此漏洞形成的根本原因,在于$, 正则表达式中$不仅匹配字符串结尾位置,也可以匹配\n 或 \r 在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。  

Ngnix漏洞

Nginx配置文件错误导致的解析漏洞 (用phpstudy2014 ,Nginx + PHP5.3n)  

对于任意文件名,在后面添加/xxx.php(xxx为任意字符)后,即可将文件作为php解析。 例:info.jpg后面加上/xxx.php,会将info.jpg 以php解析。 这与漏洞配置有关。

Nginx 空字节任意代码执行漏洞  

waf绕过

数据溢出,通过大量数据干扰文件名的识别

符号变异,让他找不到对应的符号前后不能识别

截断

重复数据,进行替换

fuzz大法

修复方法

后端验证

对后缀名

MIME类型验证

文件头验证

本博客仅仅用于学习交流,欢迎大家瞧瞧看看!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值