文件上传-php


查找方式
***(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
二次渲染
其实针对于,图片解析来讲,如果说我上传了一个图片。他会进行二次的修改和渲染,其实我个人觉得这是一个怎么说呢?这是一个对于有解析漏洞的一个前提。
**解决:
- 首先上传一张正常的图片,找到对应的保存位置。同时下载对应保存好的图片。
- 前后两张图片进行比较,找到未渲染的地方(也就是没有修改的地方),插入我们的木马。
相关文章:
文件上传-php
查找方式 ***(1) 黑盒 查找(upload) 扫描 (2) 应用型 窗口 上传中心或者后台中心 上传 Ps:后台是后台 权限是权限 (3) 会员中心 (4) 白盒 基本函数定义 写前端的 Enctype 上传类型Method 提交方式Onsubmit 鼠标的时间Action"放在指定文件"Php 接受表单数据 isset(…...
C++设计模式(更新中)
文章目录 1、创建型模式1.1 简单工厂(Simple Factory)(1)示例(2)总结 1.2 工厂方法(Factory Method)(1)示例(2)总结 1.3 抽象工厂&…...
Kali crunsh字典工具
查看自带密码字典 vim /usr/share/wordlists 使用 crunch 字典工具 随机组成6位纯数字密码 crunch 6 6 0123456789 -o test1.txt 由 Abc1234 随机组成的 6~8 位密码 crunch 6 8 Abc1234 -o test2.txt 以A开头后面跟3位数字组成的4位密码 crunch 4 4 -t A%%% -o test3.txt...
Redis系列---Redission分布式锁
文章目录 类型原理使用看门狗与setNx比较 类型 使用Redission,lock的机制其实是使用了ttl,一直等ttl为0再get。无论是redission还是redis的setNx,只要是锁,都必须有加锁和释放锁两个动作,二者缺一不可,并且…...
算法打卡:第十一章 图论part05
今日收获:并查集理论基础,寻找存在的路径 1. 并查集理论基础(from代码随想录) (1)应用场景:判断两个元素是否在同一个集合中 (2)原理讲解:通过一个一维数组…...
3.《DevOps》系列K8S部署CICD流水线之部署MetalLB负载均衡器和Helm部署Ingress-Nginx
架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G操作系统:Rocky9.3 后续通过K8S部署GitLab、Harbor、Jenkins 为什么使用MetalLB 当使用云平…...
MySQL:表的约束
目录 1 空属性 2 默认值 3 列描述 4 zerofill 5 主键 6 自增长 7 唯一键 8 外键 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有…...
38.重复的子字符串
方法1: class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;String s2(ss).substring(1,(ss).length()-1);//去掉首尾字符return s2.contains(s);//判断是否包含s} } class Solution(object):def rep…...
Linux服务部署指南
在现代的IT基础设施中,Linux操作系统因其稳定性、安全性和灵活性而广泛用于服务部署。本文将提供一个全面的指南,介绍如何在Linux环境下部署服务,包括准备工作、部署流程、以及监控和维护。 1. 准备工作 在开始部署服务之前,确保…...
Unity中,如果你想让多个数字人轮流显示和隐藏
在Unity中,如果你想让多个数字人轮流显示和隐藏,可以通过控制它们的GameObject的激活状态 (SetActive()) 来实现。你可以创建一个简单的脚本来控制这些数字人的显示和隐藏,使用协程或者定时器来处理轮流的效果。 下面是一个基本的实现思路&a…...
【LeetCode】动态规划—删除并获得点数(附完整Python/C++代码)
动态规划—#740. 删除并获得点数 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 给你一个整数数组 n u m s nums nums ,你可以对它进行一…...
利用 PostgreSQL 构建 RAG 系统实现智能问答
在现代信息检索和自然语言处理的场景中,检索增强生成 (Retrieval-Augmented Generation, RAG) 系统因其结合了知识库检索和生成模型的优势,成为了一种非常流行的智能问答方法。在这篇博文中,我将展示如何利用PostgreSQL作为向量存储数据库&am…...
Go 并发模式:扩展与聚合的高效并行
当你搭建好一个管道系统后,数据在各个阶段之间顺畅地流动,并根据你设定的操作逐步转换。这一切看起来像是一条美丽的溪流,然而,为什么有时候这个过程会如此缓慢呢? 在处理数据时,某些阶段可能会非常耗时,导致上游的阶段被阻塞,无法继续处理数据。这不仅影响了管道的整…...
【Transformers基础入门篇2】基础组件之Pipeline
文章目录 一、什么是Pipeline二、查看PipeLine支持的任务类型三、Pipeline的创建和使用3.1 根据任务类型,直接创建Pipeline,默认是英文模型3.2 指定任务类型,再指定模型,创建基于指定模型的Pipeline3.3 预先加载模型,再…...
java反射学习总结
最近在项目上有一个内部的CR,运用到了反射。想起之前面试的时候被面试官追问有没有在项目中用过反射,以及反射的原理和对反射的了解。 于是借此机会,学习回顾一下反射,以及在项目中可能会用到的场景。 Java 中的反射概述 反射&…...
探索C语言与Linux编程:获取当前用户ID与进程ID
探索C语言与Linux编程:获取当前用户ID与进程ID 一、Linux系统概述与用户、进程概念二、C语言与系统调用三、获取当前用户ID四、获取当前进程ID五、综合应用:同时获取用户ID和进程ID六、深入理解与扩展七、结语在操作系统与编程语言的交汇点,Linux作为开源操作系统的典范,为…...
1.4 边界值分析法
欢迎大家订阅【软件测试】 专栏,开启你的软件测试学习之旅! 文章目录 前言1 定义2 选取3 具体步骤4 案例分析 本篇文章参考黑马程序员 前言 边界值分析法是一种广泛应用于软件测试中的技术,旨在识别输入值范围内的潜在缺陷。本文将详细探讨…...
Spring IOC容器Bean对象管理-注解方式
目录 1、Bean对象常用注解介绍 2、注解示例说明 1、Bean对象常用注解介绍 Component 通用类组件注解,该类被注解,IOC容器启动时实例化此类对象Controller 注解控制器类Service 注解业务逻辑类Respository 注解和数据库操作的类,如DAO类Reso…...
OpenAI API: How to catch all 5xx errors in Python?
题意:OpenAI API:如何在 Python 中捕获所有 5xx 错误? 问题背景: I want to catch all 5xx errors (e.g., 500) that OpenAI API sends so that I can retry before giving up and reporting an exception. 我想捕获 OpenAI API…...
C++初阶学习——探索STL奥秘——标准库中的priority_queue与模拟实现
1.priority_queque的介绍 1.priority_queue中文叫优先级队列。优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。 2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
