PHP文件上传中fileinfo出现的安全问题

这篇具有很好参考价值的文章主要介绍了PHP文件上传中fileinfo出现的安全问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是fileinfo

fileinfo的函数通过在文件的给定位置查找特定的魔术字节序列 来猜测文件的内容类型以及编码,也就是说我们可以获得上传文件的MIME信息

在windows中我们可以在php.ini中开启
PHP文件上传中fileinfo出现的安全问题

extension=fileinfo

在linux中开启fileinfo

找到fileinfo的路径
执行命令:find / -name fileinfo,查询到fileinfo所在目录
执行phpsize命令
执行命令:/usr/local/php/bin/phpize
执行configure配置
执行命令:./configure --with-php-config=/usr/local/php/bin/php-config
注意:如果提示php-config命令不存在,则需要先安装php-devel,执行命令:yum install php-devel。
编译安装
命令:make && make install
修改php.ini文件
在php.ini文件中添加extension=fileinfo.so

在打开fileinfo后我们就可以使用fileinfo扩展了
那fileinfo包括哪些呢
PHP文件上传中fileinfo出现的安全问题
像如图红圈中的那些都是fileinfo扩展。

fileinfo预定义常量

常量名 作用
FILEINFO_NONE 无特殊处理
FILEINFO_SYMLINK 跟随符号链接
FILEINFO_MIME_TYPE 返回 mime 类型。 自 PHP 5.3.0 可用
FILEINFO_MIME_ENCODING 返回文件的 mime 编码。 自 PHP 5.3.0 可用
FILEINFO_MIME 按照 RFC 2045 定义的格式返回文件 mime 类型和编码
FILEINFO_COMPRESS 解压缩压缩文件。 由于线程安全问题,自 PHP 5.3.0 禁用
FILEINFO_DEVICES 查看设备的块内容或字符
FILEINFO_CONTINUE 返回全部匹配的类型
FILEINFO_PRESERVE_ATIME 如果可以的话,尽可能保持原始的访问时间
FILEINFO_RAW 对于不可打印字符不转换成 \ooo 八进制表示格式
FILEINFO_EXTENSION 根据 MIME 类型返回适当的文件扩展名。 有的文件类型具有多种扩展名,例如 JPEG 将会返回多个扩展名,以斜杠分隔,比如 “jpeg/jpg/jpe/jfif”。如果在 magic.mime 数据库里类型未知,则返回的是 “???”。 PHP 7.2.0 起有效

如何使用fileinfo去过滤上传文件

首先我们要创建一个 fileinfo 资源,然后就可以调用 fileinfo 资源了

$file = $_FILES;
$finfor = finfo_open(FILEINFO_MIME_TYPE);
$info = finfo_file($finfor, $file['jpg']['tmp_name']); //拿上传文件的MIME头与finfo_open()返回mime类型进行比较返回真实的mime头

此时若上传文件是txt文件伪造后的jpg等图片文件则会返回一个txt文件的mime头
那修改掉数据包中的mime头可以绕过吗?
PHP文件上传中fileinfo出现的安全问题
上面这图就是直接上传的一个txt改jpg图片文件的,可以看到他的mime类型为image/jpeg

POST /study/wjsc/sc.php HTTP/1.1
Host: 192.168.0.106
Content-Length: 199
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.0.106
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymrijfqP5su2sSW5Y
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.0.106/study/wjsc/sc.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

------WebKitFormBoundarymrijfqP5su2sSW5Y
Content-Disposition: form-data; name="jpg"; filename=".jsp.jpg"
Content-Type: image/jpeg

<?php phpinfo();?>
------WebKitFormBoundarymrijfqP5su2sSW5Y--

看一下上传后的效果
PHP文件上传中fileinfo出现的安全问题
提示不合法,可以看一下返回的mime类型
PHP文件上传中fileinfo出现的安全问题
返回为text/x-php类型。

如何去绕过fileinfo检测

这样写看似安全,但是由于fileinfo的检测原理恰恰会出现安全漏洞。
首先,先上传一个正常的图片
PHP文件上传中fileinfo出现的安全问题
提示合法。
那接下来若上传的是一个图片马呢
图片马的合成
PHP文件上传中fileinfo出现的安全问题
提示合法,可以看到mime类型也是image/png,那由此可见fileinfo也不是无敌的。
PHP文件上传中fileinfo出现的安全问题
接下来就是思考正常的图片与伪造过后的图片有哪些不一样,在一张图片中大概是由文件头和内容组成那伪造的图片除了内容以外就是文件头的问题了
在伪造的文件中加上GIF89a,然后上传。
PHP文件上传中fileinfo出现的安全问题
可以看到提示合法
PHP文件上传中fileinfo出现的安全问题
就这样就绕过了fileinfo的检测
方便实验我将文件后缀改成了.php
PHP文件上传中fileinfo出现的安全问题
执行成功!
在墨者学院的在线靶场中也存在一样的漏洞靶场可以帮助快速了解这个漏洞文章来源地址https://www.toymoban.com/news/detail-464174.html

到了这里,关于PHP文件上传中fileinfo出现的安全问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第24天:安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制

    如果被抓包抓到数据包,并修改 Content-Type内容 则也可以绕过筛查 正常进行上传和下载 无过滤机制 黑名单过滤机制 使用 explode 函数通过点号分割文件名,获取文件后缀 使用 end 函数获取数组中的最后一个元素,即文件后缀 检查文件后缀是否在黑名单中 如果文件后缀在黑名

    2024年04月29日
    浏览(65)
  • web安全-文件上传漏洞-图片马制作-相关php函数讲解-upload靶场通关详细教学(3)

    制作图片马有两种方法,一种是文本方式打开,末尾粘贴一句话木马,令一种是使用命令进行合成。 方法1 首先准备好一个图片(这里是1.png)。 将一个图片以文本格式打开(这里用的Notepad++,以记事本方式打开修改也能连接成功,不过修改后图片无法正常显示了)。 后面粘

    2024年02月06日
    浏览(56)
  • 文件上传upload-labs第三关,Apache无法解析php3、php5等问题

    修改文件后缀名为php5,上传后。无法解析php5 参考网上众多教程,修改httpd.conf配置文件: 添加.php3 .php5 phtml,大部分都可以解决 PHPStudy中AddType application/x-httpd-php等Apache命令之所以在Apache的设置文件中设置后未实现目标效果是由于PHP的版本不符导致的 修改版本,切换到如图所

    2024年02月12日
    浏览(56)
  • [网络安全] Windows Server 设置文件屏蔽防止黑客利用漏洞上传特定类型的非法文件(.asp .aspx .jsp .php)

    [网络安全] Windows Server 设置文件屏蔽防止黑客利用文件上传漏洞上传特定类型的非法文件(.asp .aspx .jsp .php) 我在负责网站运维期间,遇到过一次黑客利用公司网站内使用的开源文件上传工具漏洞上传非法文件(可执行脚本) 我是通过设置文件屏蔽来防止此类事件的再次发生。

    2024年02月12日
    浏览(59)
  • 文件上传gitee中出现问题fatal: remote origin already exists.(远程来源已存在) 解决方法

    当我们在上传文件到gitee中的时候,输入git remote add origin git@toscode.gitee.com:jiemengjie(码云账号)/vue3-project(自己创建的仓库名).git后,会出现一句话 fatal: remote origin already exists.远程来源已存在。 如下图所示: 这时候我们可以输入命令  git remote -v ,意思是列出所有的远程仓

    2024年02月04日
    浏览(63)
  • 「PHP系列」PHP文件处理及文件上传详解

    PHP 提供了丰富的文件处理功能,使得开发者可以方便地在服务器端进行文件的创建、读取、写入、删除等操作。以下是一些常见的 PHP 文件处理操作及其示例: 使用 fopen() 函数打开文件: 模式可以是以下之一: \\\"r\\\" :只读方式打开,将文件指针指向文件头。 \\\"w\\\" :写入方式打

    2024年04月22日
    浏览(44)
  • 文件上传之PHP

    (1)图片头 GIF89a ① ② ③ php短标签 我们最常见的 PHP 标签就是?php ?了,但是 PHP 中还有两种短标签,即? ?和?= ?。当 “php” 被过滤了之后,此时我们便不能使用?php ?了,但是我们可以用另外两种短标签进行绕过,并且在短标签中的代码不需要使用分号;。 其中,? ?相当于

    2024年02月15日
    浏览(39)
  • php 文件上传

    目录 1 php.ini 配置文件的修改 2.系统返回码详解 错误级别 4.上传简单示例  5.php代码简单优化 配置项 说明 file_uploads on 为 开启文件上传功能, off 为关闭 post_max_size 系统允许的 POST 传参的最大值 ,默认 8M upload_max_filesize 系统允许的上传文件的最大值 ,默认 2M menory_limit 内存使

    2024年01月25日
    浏览(40)
  • C#使用FileInfo和DirectoryInfo类来执行文件和文件夹操作

    System.IO.FileInfo 和 System.IO.DirectoryInfo 是C#中用于操作文件和文件夹的类,它们提供了许多有用的方法和属性来管理文件和文件夹。 System.IO.FileInfo : FileInfo 类用于操作单个文件的信息和内容 。以下是一些常用的方法和属性: Exists :检查文件是否存在。 FullName :获取文件的完

    2024年02月12日
    浏览(49)
  • PHP文件上传之条件竞争(其一)

    目录 一、什么是条件竞争 二、场景代码分析 本文用于实验的PHP代码如下:  知识点补充: 代码分析: 三、条件竞争步骤 1、竞争payload: 2、竞争方法: 1、burpsuite: 2、python脚本:   在某些文件上传情境中,后端代码会先保存我们所上传的文件,然后再检查我们上传的文件

    2024年02月05日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包