文件上传

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 主要介绍了几种常见的文件上传的思路

什么是文件上传?

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

文件头验证

目录
相关文章
C#文件上传
C#文件上传
63 0
|
28天前
|
存储 PHP 文件存储
32 单文件上传
路老师分享PHP文件上传教程,涵盖配置php.ini、使用$_FILES变量和move_uploaded_file()函数等关键步骤,帮助你轻松实现单文件上传功能。纯干货,技术知识分享。
30 1
|
1月前
|
Java
smartupload文件上传!
使用 `smartupload.jar` 实现文件上传和下载。首先将 `smartupload.jar` 添加到项目中,然后创建上传页面,确保表单使用 `POST` 方法并设置 `enctype=&quot;multipart/form-data&quot;`。接着在服务器端通过 `SmartUpload` 对象处理文件上传,保存文件到指定目录,并获取表单中的其他数据。最后,实现文件下载功能,设置响应头以触发浏览器下载文件。
38 0
|
7月前
|
JSON 数据格式
文件上传~~
文件上传~~
47 0
|
4月前
|
前端开发 JavaScript 数据库
多个文件上传
多个文件上传
34 0
|
JavaScript 前端开发 移动开发
浅谈文件上传
浅谈文件上传
浅谈文件上传
|
存储 移动开发 JavaScript
|
安全 应用服务中间件 PHP
[SUCTF 2019]CheckIn(文件上传)
[SUCTF 2019]CheckIn(文件上传)
186 0
|
开发框架 安全 JavaScript
文件上传利用总结
文件上传利用总结
368 0