写点什么

web-- 文件上传

  • 2022-11-03
    河南
  • 本文字数:1593 字

    阅读完需:约 5 分钟

什么是文件上传?

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者 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 配置文件也可以做到这种效果

GIF89aauto_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 类型验证

文件头验证


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

发布于: 刚刚阅读数: 5
用户头像

还未添加个人签名 2022-11-01 加入

还未添加个人简介

评论

发布
暂无评论
web--文件上传_WEB安全_我是一个茶壶_InfoQ写作社区