首页 > 其他分享 >web安全漏洞之文件上传

web安全漏洞之文件上传

时间:2024-11-11 22:17:25浏览次数:3  
标签:web php name 文件 file 安全漏洞 PHP 上传

文件上传


 

            1什么是文件上传

 

 

 

文件上传就比如上传用户头像,上传图片,上传附件等。在服务端实现文件上传功能时,如果对用户上传的文件没有做好处理,就有可能导致十分严重的安全问题,比如被上传木马文件造成RCE(远程代码执行)

 

php文件上传的基本代码

 

```php

<?php

 

$file=$_FILES['file'];

 

move _uploaded_file($file[' tmp_name'],$file[ 'name']);

 

echo $file['name'];

```

 

 

 

PHP的文件上传,通常使用$_FILES配合move_uploaded_file实现。如果直接使用用户的文件名作为保存的文件名,直接保存在web可访问的目录中,就造成了任意文件上传漏洞。

 

                2 文件名截断绕过

 

 

 

 1.00截断

 

00截断是很早之前的一种绕过上传限制的方法,需要PHP版本小于5.4.39.

 

00截断是move_uploaded file函数的第二个参数dest,在处理字符时,如果该字符串中间有“\x00”字符,会发生截断。比如"1.php\x00.jpg",因为PHP本身的字符串是二进制安全的(字符串可以保存\x00字符),在php代码中检测扩展名会获取到".jpg",但是在移动后会变成“1.php”

 

这种文件上传的00截断还有一个限制是,从$_FILES['file']['name’]中取出的文件是不包含"\x00"的,也就是说只有下面的代码才有可能出现00截断的文件上传漏洞。

 

```php

<?php

 

$file = $_FILEs['file'];

 

$dir =$_POST['dir'];

 

move_uploaded_file($file['tmp_name'],$dir.'/'.$file['name']);

 

echo $file['name'];

```

 

2.转换字符集造成的截断

 

虽然$_FILES['file’]['name]不会出现"x00"字符,但是在进行字符集转换时仍有可能发生截断。PHP实现字符集转换常用iconv()函数,UTF-8单字节允许的字符范围为"\x00"-"\x7f",如果被转换的字符不在该范围内,会造成PHP_ICONV_ERR_ILLEGAL_SEQ异常,在PHP版本小于5.4时,出现该异常后,就不会继续处理后续字符,造成截断。

 

          3文件扩展名黑名单绕过

 

 

 

在上传文件时,通过检测上传文件的扩展名是否在黑名单中,如果在黑名单中则拒绝上传。这种黑名单检测主要有两种场景。

 

 1.上传文件重命名

 

代码对上传的文件扩展名进行了检测,如果在黑名单中就拒绝上传。并且将上传的文件名进行了重命名。在这种场景下,可以使用一些较为冷门但可以被解析的扩展名进行绕过。

 

比如PHP的php3、php5、phtml、pht等(但是有限制,受限于web服务器,要求服务器能认识)。ASP可识别的有cdx、cer、asa等。JSP可识别的jspx等

 

还可以利用一些操作系统的特性,比如windows中的"php::$DATA","PHP"

 

2.上传文件不重命名

 

在这种场景下,除了利用一些冷门但可以解析的扩展名之外,还可以通过上传".htaccess"或".user.ini"等配置文件实现绕过。

a.上传.htaccess

".htaccess"是Apache服务器分布式配置文件的默认名称。在Apache主配置文件中通过"AllowOverride"指令配置”.htaccess”文件中可以广用哪些指令。在Apache低于"2.3.8"的版本中默认为"AI”,在高版本中为"None"。

在Apache版本小于2.3.8时,可以尝试上传".htaccess",使用"SetHandler"指令使PHP解析其他扩展名的文件。

 

```

l <FilesHatch "a png">

 

2 setHandler application/x-httpd-php

 

3 </FilesMatch>

```

 

b.上传.userini

自PHP 5.3.0起支持基于每个目录的".htaccess"风格的INI文件,此类文件仅被CGI/FastCGl处理,默认文件名为".user.ini"。为了保证安全性,".user.ini"不能覆盖"php.ini"中的所有配置。在"https://www.php.net/manual/zh/ini.list.php“中可以査看所有的配置选项的配置范围。

在PHP INIPERDIR可配置的选项中,存在一个特殊配置"auto_prepend file"

标签:web,php,name,文件,file,安全漏洞,PHP,上传
From: https://blog.csdn.net/2402_87039650/article/details/143653964

相关文章

  • 成为一名Web安全工程师很难吗?(非常详细),零基础入门到精通,看这一篇就够了
    前言Web安全渗透:主要是对Web应用程序和相应的软硬件设备配置的安全性进行测试。通过模拟入侵者的手段可以在授权的情况下进行流量攻击、信息收集、文件提取等敏感行为,最终输出测试报告,从而准确修复这一系列漏洞。主要作用于各个企业网站、业务系统、移动APP、WiFi热点、Do......
  • WEB 漏洞 - SQL 注入之 MySQL 注入深度解析
    目录WEB漏洞-SQL注入之MySQL注入深度解析一、从宇宙奇想到SQL注入二、SQL注入原理回顾(一)基本概念(二)以简单PHP代码示例说明三、MySQL注入步骤(一)确定注入点(二)判断注入类型(三)利用注入获取信息或执行恶意操作四、防御MySQL注入的方法(一)使用参数化查询(二)......
  • WEB 漏洞 - 文件上传之解析漏洞与编辑器安全
    目录WEB漏洞-文件上传之解析漏洞与编辑器安全一、漏洞概述二、原理分析三、实现步骤与代码示例一、漏洞概述在WEB应用中,文件上传功能是一个常见的模块,但它也存在着诸多安全隐患。文件上传的解析漏洞以及编辑器相关的安全问题就是其中重要的部分。解析漏洞是指......
  • libwebp在windows下构建及编译运行
    因为正在进行WEBP图像的学习,因此有必要对WEBP的官方实现——libwebp进行本地构建和编译,以方便对标准及代码的理解。下面记录一下,在本地Windows电脑上,构建并编译libwebp的过程。步骤一:下载源码首先,获取libwebp的最新源码:从官方Git仓库克隆:gitclonehttps://chromium......
  • Idea调用WebService
    Idea调用WebService​WebService是一种基于网络的技术,它允许不同的应用程序在互联网上相互通信。要进行WebService对接,以下是一些关键步骤和注意事项:一、理解WebService的基本概念定义:WebService是一种基于标准化协议和格式的应用程序接口(API),它使用XML和HTTP来进行通信......
  • swoole,websocket服务器(协程风格)--进阶篇
        swoole的websocket服务器(协程风格)示例真不算友善,从头了解到尾,那还好,但是谁有那么多时间从头到尾了解。示例不够针对性,写websocket就该单独写websocket的东西,偏偏又加上http的东西。这里我来解读一下websocket服务器(协程风格)示例<?php  useSwoole\Http\Reque......
  • web服务器Apache与Nginx的优缺点?
    Apache是一个开放源代码的Web服务器软件,它能够运行在几乎所有主流的操作系统上,包括Unix、Linux、Windows、MacOS等。ApacheHTTP服务器是世界上最流行的Web服务器之一,它由Apache软件基金会维护和支持。Apache提供了强大的功能,包括:可配置性:用户可以通过配置文件来......
  • WebMagic 抓取,selenium模拟点击操作,模拟将抓取的数据入库
    动态页面爬虫前的准备:https://www.cnblogs.com/maohuidong/p/18517953java添加maven依赖:<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.4</version></dependency><......
  • 可视化web组态开发工具
     BY组态是一款功能强大的基于Web的可视化组态编辑器,采用标准HTML5技术,基于B/S架构进行开发,支持WEB端呈现,支持在浏览器端完成便捷的人机交互,简单的拖拽即可完成可视化页面的设计。可快速构建和部署可扩展的SCADA、HMI、仪表板或IIoT系统。使用BY组态编辑器,可以创建现代化、可视......
  • web组态--新一代全流程低代码物联网平台
    实际完成效果​​​​​​​​​1.添加应用图纸 登录by组态后台:http://www.byzt.net:90​​点击组态管理-画面管理,先新建一个组态画面,填写画面名称,保存,进入组态画面。​​选择画面管理,点击图示位置编辑画面,来构建组态。​​开始画组态图。​​2.组态绘......