当前位置: 首页 > news >正文

文件上传-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. 前后两张图片进行比较,找到未渲染的地方(也就是没有修改的地方),插入我们的木马。

相关文章:

文件上传-php

查找方式 ***(1) 黑盒 查找(upload) 扫描 (2) 应用型 窗口 上传中心或者后台中心 上传 Ps:后台是后台 权限是权限 (3) 会员中心 (4) 白盒 基本函数定义 写前端的 Enctype 上传类型Method 提交方式Onsubmit 鼠标的时间Action"放在指定文件"Php 接受表单数据 isset(…...

C++设计模式(更新中)

文章目录 1、创建型模式1.1 简单工厂&#xff08;Simple Factory&#xff09;&#xff08;1&#xff09;示例&#xff08;2&#xff09;总结 1.2 工厂方法&#xff08;Factory Method&#xff09;&#xff08;1&#xff09;示例&#xff08;2&#xff09;总结 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&#xff0c;lock的机制其实是使用了ttl&#xff0c;一直等ttl为0再get。无论是redission还是redis的setNx&#xff0c;只要是锁&#xff0c;都必须有加锁和释放锁两个动作&#xff0c;二者缺一不可&#xff0c;并且…...

算法打卡:第十一章 图论part05

今日收获&#xff1a;并查集理论基础&#xff0c;寻找存在的路径 1. 并查集理论基础&#xff08;from代码随想录&#xff09; &#xff08;1&#xff09;应用场景&#xff1a;判断两个元素是否在同一个集合中 &#xff08;2&#xff09;原理讲解&#xff1a;通过一个一维数组…...

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 外键 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性。比如有…...

38.重复的子字符串

方法1&#xff1a; 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基础设施中&#xff0c;Linux操作系统因其稳定性、安全性和灵活性而广泛用于服务部署。本文将提供一个全面的指南&#xff0c;介绍如何在Linux环境下部署服务&#xff0c;包括准备工作、部署流程、以及监控和维护。 1. 准备工作 在开始部署服务之前&#xff0c;确保…...

Unity中,如果你想让多个数字人轮流显示和隐藏

在Unity中&#xff0c;如果你想让多个数字人轮流显示和隐藏&#xff0c;可以通过控制它们的GameObject的激活状态 (SetActive()) 来实现。你可以创建一个简单的脚本来控制这些数字人的显示和隐藏&#xff0c;使用协程或者定时器来处理轮流的效果。 下面是一个基本的实现思路&a…...

【LeetCode】动态规划—删除并获得点数(附完整Python/C++代码)

动态规划—#740. 删除并获得点数 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 给你一个整数数组 n u m s nums nums &#xff0c;你可以对它进行一…...

利用 PostgreSQL 构建 RAG 系统实现智能问答

在现代信息检索和自然语言处理的场景中&#xff0c;检索增强生成 (Retrieval-Augmented Generation, RAG) 系统因其结合了知识库检索和生成模型的优势&#xff0c;成为了一种非常流行的智能问答方法。在这篇博文中&#xff0c;我将展示如何利用PostgreSQL作为向量存储数据库&am…...

Go 并发模式:扩展与聚合的高效并行

当你搭建好一个管道系统后,数据在各个阶段之间顺畅地流动,并根据你设定的操作逐步转换。这一切看起来像是一条美丽的溪流,然而,为什么有时候这个过程会如此缓慢呢? 在处理数据时,某些阶段可能会非常耗时,导致上游的阶段被阻塞,无法继续处理数据。这不仅影响了管道的整…...

【Transformers基础入门篇2】基础组件之Pipeline

文章目录 一、什么是Pipeline二、查看PipeLine支持的任务类型三、Pipeline的创建和使用3.1 根据任务类型&#xff0c;直接创建Pipeline&#xff0c;默认是英文模型3.2 指定任务类型&#xff0c;再指定模型&#xff0c;创建基于指定模型的Pipeline3.3 预先加载模型&#xff0c;再…...

java反射学习总结

最近在项目上有一个内部的CR&#xff0c;运用到了反射。想起之前面试的时候被面试官追问有没有在项目中用过反射&#xff0c;以及反射的原理和对反射的了解。 于是借此机会&#xff0c;学习回顾一下反射&#xff0c;以及在项目中可能会用到的场景。 Java 中的反射概述 反射&…...

探索C语言与Linux编程:获取当前用户ID与进程ID

探索C语言与Linux编程:获取当前用户ID与进程ID 一、Linux系统概述与用户、进程概念二、C语言与系统调用三、获取当前用户ID四、获取当前进程ID五、综合应用:同时获取用户ID和进程ID六、深入理解与扩展七、结语在操作系统与编程语言的交汇点,Linux作为开源操作系统的典范,为…...

1.4 边界值分析法

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 定义2 选取3 具体步骤4 案例分析 本篇文章参考黑马程序员 前言 边界值分析法是一种广泛应用于软件测试中的技术&#xff0c;旨在识别输入值范围内的潜在缺陷。本文将详细探讨…...

Spring IOC容器Bean对象管理-注解方式

目录 1、Bean对象常用注解介绍 2、注解示例说明 1、Bean对象常用注解介绍 Component 通用类组件注解&#xff0c;该类被注解&#xff0c;IOC容器启动时实例化此类对象Controller 注解控制器类Service 注解业务逻辑类Respository 注解和数据库操作的类&#xff0c;如DAO类Reso…...

OpenAI API: How to catch all 5xx errors in Python?

题意&#xff1a;OpenAI API&#xff1a;如何在 Python 中捕获所有 5xx 错误&#xff1f; 问题背景&#xff1a; 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中文叫优先级队列。优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大的。 2. 此上下文类似于堆&#xff0c;在堆中可以随时插入元素&#xff0c;并且只能检索最大堆元…...

Simple Form终极测试覆盖率指南:如何达成团队质量目标

Simple Form终极测试覆盖率指南&#xff1a;如何达成团队质量目标 【免费下载链接】simple_form Forms made easy for Rails! Its tied to a simple DSL, with no opinion on markup. 项目地址: https://gitcode.com/gh_mirrors/si/simple_form Simple Form作为Rails生态…...

如何快速创建专业图表:Mermaid数据可视化的完整指南

如何快速创建专业图表&#xff1a;Mermaid数据可视化的完整指南 【免费下载链接】mermaid mermaid-js/mermaid: 是一个用于生成图表和流程图的 Markdown 渲染器&#xff0c;支持多种图表类型和丰富的样式。适合对 Markdown、图表和流程图以及想要使用 Markdown 绘制图表和流程图…...

RWKV7-1.5B-g1a作品分享:多轮追问下保持主题聚焦的能力验证

RWKV7-1.5B-g1a作品分享&#xff1a;多轮追问下保持主题聚焦的能力验证 1. 模型简介与测试背景 rwkv7-1.5B-g1a是基于RWKV-7架构的多语言文本生成模型&#xff0c;特别适合基础问答、文案续写、简短总结和轻量中文对话场景。本次测试将重点验证该模型在多轮对话中保持主题聚焦…...

FreeRTOS项目瘦身技巧:如何精简文件并优化工程结构(基于Keil环境)

FreeRTOS项目瘦身实战&#xff1a;Keil环境下的工程精简与结构优化 在嵌入式开发中&#xff0c;FreeRTOS因其轻量级和开源特性成为许多项目的首选RTOS。但随着项目迭代&#xff0c;工程往往会积累大量冗余文件&#xff0c;导致编译速度下降、存储空间浪费。本文将分享一套系统化…...

达梦数据库-归档日志文件-记录总结

达梦数据库-归档日志文件-记录总结DM数据库可以运行在归档模式或非归档模式下。如果是归档模式&#xff0c;联机日志文件中的内容保存到硬盘中&#xff0c;形成归档日志文件&#xff1b;如果是非归档模式&#xff0c;则不会形成归档日志。归档日志文件以归档时间命名&#xff0…...

【渗透测试】HTB靶场之Lock 全过程wp

息收集 目标ip:10.129.234.64 kali ip:10.10.16.4 ┌──(root㉿kali)-[~/桌面/HTB]└─# nmap -A -T4 10.129.234.64 Starting Nmap 7.95 ( https://nmap.org ) at 2026-02-15 01:34 ESTNmap scan report for 10.129.234.64Host is up (0.30s latency).Not shown: 996 filte…...

计算机毕设 java 基于 HTML5 的酒店预订管理系统 java 基于 HTML5 的智能酒店预订系统 java 基于 HTML5 的酒店在线预订管理平台

计算机毕设 java 基于 HTML5 的酒店预订管理系统 4u2r79&#xff08;配套有源码 程序 mysql 数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联 xi 可分享在互联网和移动互联网飞速发展的当下&#xff0c;线上预订已成为酒店行业的主流消费模式…...

.NET 11 预览版1:CoreCLR 在 WebAssembly 上的全面集成与性能突破

摘要随着.NET 11 Preview 1 的正式发布&#xff0c;.NET 生态系统迎来了一次具有分水岭意义的基础架构演进。本次发布的核心亮点在于.NET 的 CoreCLR 运行时现在已经能够原生运行在 WebAssembly (WASM) 平台上。这是一个重大的技术突破&#xff0c;标志着微软在跨平台战略上的全…...

实战电商用户行为分析:基于Dinky+Flink SQL构建实时数仓(Kafka→HBase→Doris全链路)

电商用户行为实时分析实战&#xff1a;基于Dinky与Flink SQL的全链路实现 电商平台每天产生海量用户行为数据&#xff0c;如何实时处理这些数据并快速生成业务洞察&#xff0c;成为提升用户体验和商业价值的关键。本文将手把手带你构建一个完整的实时分析系统&#xff0c;从Kaf…...

【Python异步I/O终极指南】:20年CTO亲授asyncio高并发实战心法,避开97%开发者踩过的12个致命陷阱

第一章&#xff1a;Python异步I/O的本质与演进脉络Python异步I/O并非简单的“多线程替代方案”&#xff0c;其本质是**在单线程内通过事件循环&#xff08;event loop&#xff09;协同调度I/O等待任务&#xff0c;避免CPU空转&#xff0c;实现高并发吞吐**。它依赖操作系统底层…...