首页 > 编程语言 >文件上传-php

文件上传-php

时间:2024-09-20 11:51:01浏览次数:10  
标签:FILES 文件 jpg 过滤 php 上传

image.png

查找方式

***(1) 黑盒 查找(upload) 扫描
(2) 应用型 窗口 上传中心或者后台中心 上传 Ps:后台是后台 权限是权限
(3) 会员中心
(4) 白盒

基本函数定义 写前端的
Enctype 上传类型

Method 提交方式

Onsubmit 鼠标的时间

Action="放在指定文件"

Php 接受表单数据 

isset()函数 是查看有没有点击 提交

Trim()  将字符串的 两边的空格 去除掉    替换成空

 Strrchr(语句字符串,'.')  意思就是 从.开始断开 输出 .后的语句

Strtolower() 转换小写

Str_ireplace('指定字符','',指定字符串)

将指定字符串里面的字符转换为空格

Array()  是一个数组

In_array('字符串','数组')  判断字符串是不是在数组中
文件上传代码:
在PHP中上传一个文件建一个表单要比ASP中灵活得多。具体的看代码。

如: 

代码如下:

<form enctype="multipart/form-data" action="upload.php" method="post"> 

<input type="hidden" name="MAX_FILE_SIZE" value="1000"> 

<input name="myFile" type="file"> 

<input type="submit" value="上传文件"> 

</form> 

$_FILES 

$_POST 

$_GET 

等函数获取表单内容。 

今天我们着重讲$_FILES函数。  当客户端提交后,我们获得了一个$_FILES 数组 

$_FILES数组内容如下: 

$_FILES['myFile']['name'] 客户端文件的原名称。 

$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 

$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。 

$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。 

$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量) 

UPLOAD_ERR_OK 

值:0; 没有错误发生,文件上传成功。 

UPLOAD_ERR_INI_SIZE 

值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 

UPLOAD_ERR_FORM_SIZE 

值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 

UPLOAD_ERR_PARTIAL 

值:3; 文件只有部分被上传。 

UPLOAD_ERR_NO_FILE 

值:4; 没有文件被上传。 

值:5; 上传文件大小为0. 

文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。

可以看到这个文件上传的机制 没有type的是相当于post传参有type的是****$FILE上传的文件

绕过

前端过滤:

1.删除掉前端过滤代码

2.禁用js (一般不推荐)

3.抓包修改 (ps:但是禁用之后可能就无法抓到数据包,例如只用js代码 只在前端保存)

mime类型

Image/gif

.html文件 text/html

.xml文件 text/xml

.png文件 image/png

.jpeg/.jpg image/jpeg

.gif image/gif

**mime类型其实就是 检查文件头

Getimagesize()函数 读取图像的信息 如果这种

黑名单

黑名单 : 一些脚本文件绝对不允许上传的
白名单 :相对应的 文件才能

如果黑名单内部并没有搞到 Php5 或者phtml文件后缀 那么就可以通过这种后缀名字来 绕过但是还是要考虑中间件是否支持
**保证在httpd.conf 中保证他可以解析

  • .php
  • .php3
  • .php4
  • .php5
  • .phtml
  • php1
  • php2
后缀名的大小写验证
后缀强制

有时候文件上传时候其实 后缀名加上 /. 或者 直接加一个 . 不影响木马后缀

如果源码没有过滤空格的话

那么可以 在数据包将空格放在后缀名的后面 那么系统就会识别.php空格

格式匹配就会有绕过

双写
不过滤 ‘.’
::$DATA **windows php
环境下下的 在后缀名之后加上 ::$DATA 可以 绕过检查  在**php版本五

如果说不能绕过那可能就是::$DATA被 去除或者加了黑名单
前者可以双写绕过

示例[[upload1-9.md#3#]]

一次过滤或者 循环过滤 绕过点和空格的过滤问题
过滤删除后缀名的的代码那么可以重写

白名单

上传html 造成xss
.htaccess

apache的 一个 配置文件 htaccess文件时Apache服务中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮助我们实现:网页301重定向、自定义404错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问,禁止目录列表,配置默认文档等功能

例如先上传 .htaccess文件 则

<FilesMatch “.jpg”> SetHandler application/x-httpd-php

将jpg格式文件当成php代码执行
**注意点必须是一定要在 httpd.conf中找到 allowovertide 设置为allow

​%00 编码 和 0x00 十六进制

***原理解释:

了解%00实际上我们要先了解0x00,0x00实际上是一个十六进制表示方式,实际上就是表示ascii码值为0,函数在处理这个字符的时候会把这个字符当做结束符,他们就读取到这里认为这一段结束了。因此如果说我们在进行参数传递使用这个\0 我们可以截断后面的内容。

**GET传参

直接对应 1.php%00 ,对应解释一下这个get传参的%00是经历过url编码的。

**POST传参

在post数据包后面以十六进制修改0X00

​条件竞争

条件竞争,前提是你上传一个文件,文件会保存,但是之后会有格外的操作。例如判断后缀或者是删除修改等。存在一个逻辑安全问题 ,首先已经保存web.jpg了此时后面的又一个文件操作 , 但是如果说我占用这个 web.jpg.此时后面的操作无法进行。但是我就可以一直上传对应的webshell ,然后使用脚本一直进行访问对应的webshell

文件解析漏洞

文件夹类型

Image.asp/1.jpg

那么此时是 1.jpg 按照asp执行

文件类型

1.php:2.jpg

这也是按照php解析

Nginx 1.jpg/1.php

二次渲染

其实针对于,图片解析来讲,如果说我上传了一个图片。他会进行二次的修改和渲染,其实我个人觉得这是一个怎么说呢?这是一个对于有解析漏洞的一个前提。

**解决:

  1. 首先上传一张正常的图片,找到对应的保存位置。同时下载对应保存好的图片。
  2. 前后两张图片进行比较,找到未渲染的地方(也就是没有修改的地方),插入我们的木马。

标签:FILES,文件,jpg,过滤,php,上传
From: https://blog.csdn.net/m0_73255659/article/details/142342228

相关文章

  • 根据提供的【文件名】批量创建文件
    需求如下:根据提供的多个【文件名】来批量创建word文件;注意:在一个【空文件夹】中放置该脚本需要创建的名字如下:==============================P1-如何学习英语音标P2-2017音标第1课发音特点P3-2017音标第2课划分音节P4-2017音标第3课元音1P5-2017音标第4课元音2P6......
  • 定义可引用的 CI/CD 配置文件中的输入参数
    极狐GitLab是一个一体化的DevOps平台,内置CI/CD功能。在极狐GitLab15.11中,我们引入了一项令人兴奋的新功能,允许用户为可包含的配置文件定义输入参数。通过在CI模板中使用输入参数的功能,您可以将模板中的任何关键字替换为参数,包括阶段、脚本或作业名称。例如,您可以向所有......
  • c# 笔记 winform添加右键菜单,获取文件大小 ,多条件排序OrderBy、ThenBy,list<double>截取
    Winform右键菜单‌要在C#Winform应用程序中添加右键菜单,‌你可以按照以下步骤操作:‌1.‌创建菜单项‌在Form的构造函数或加载事件中,‌创建ContextMenuStrip控件的实例,‌并为其添加菜单项。‌2.‌绑定到控件‌将ContextMenuStrip控件绑定到需要显示右键菜单的控件上,‌如Panel......
  • 八款主流加密软件推荐|2024年好用的企业文件加密软件盘点
    随着企业数据量的日益增长以及信息安全的重要性不断提高,文件加密软件成为各大企业保护敏感数据的关键工具。2024年,市场上涌现出众多功能强大且易于使用的加密软件,满足了企业不同的安全需求。本文将为您盘点八款主流的企业文件加密软件,帮助企业有效防范数据泄露,提升信息安全管......
  • 帝国CMS报错:您的PHP配置文件php.ini配置有问题,怎么解决
    帝国CMS报错“您的PHP配置文件php.ini配置有问题”时,通常意味着PHP的某些配置项不符合帝国CMS的要求。以下是一些可能的解决方案:检查short_open_tag配置:如果你在使用较新版本的PHP(如5.4及以上),short_open_tag配置项默认是关闭的。帝国CMS可能依赖于<?这样的短标签格式。你需要......
  • 微信小程序直传文件到OSS
    本文介绍如何在微信小程序环境下将文件上传到OSS。背景信息小程序是当下比较流行的移动应用,例如大家熟知的微信小程序、支付宝小程序等。小程序是一种全新的开发模式,无需下载和安装,为终端用户提供更优的用户体验。如何在小程序环境下上传文件到OSS也成为开发者比较关心的一个......
  • 地大信息基础信息平台 GetImg 任意文件读取漏洞
     0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用......
  • 如何存储文件
    文章目录概念介绍实现方法示例代码我们在上一章回中介绍了"如何实现本地存储"相关的内容,本章回中将介绍如何实现文件存储.闲话休提,让我们一起TalkFlutter吧。概念介绍我们在上一章回中介绍的本地存储只能存储dart语言中基本类型的数值,如果遇到大的文件如何处理......
  • 多线程搜索文件拷贝-Python脚本
    单线程的文件拷贝太折磨人了,所以这里使用多线程的方式去拉满软件效率importosimportshutilimportthreadingimportqueueclassFileItem:"""自定义文件对象类,用于存储文件路径和命名序号"""def__init__(self,path,index):self.path=path......
  • 俄罗斯的Alexey V. Gubin开发的数据恢复文件-零假设恢复只读模式下对扫描/恢复数据起
    //主要特征//WindowsFAT,NTFS,Linuxext2/3/4和XFS卷格式化的驱动器或“RAW文件系统”外部驱动器,USB拇指驱动器和存储卡带有ZARDataRecovery免费版本的数码照片恢复RAID数据恢复NAS数据恢复MBR损坏数据恢复具有多个逻辑驱动器的分区表恢复支持长文件名和国家文......