php的文件上传

news2024/11/14 21:37:33

🎼个人主页:金灰

😎作者简介:一名简单的大一学生;易编橙·终身成长社群的嘉宾.✨

专注网络空间安全服务,期待与您的交流分享~

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

🍊易编橙·终身成长社群🍊 : http://t.csdnimg.cn/iSLaP 期待您的加入~

免责声明:本文仅做技术交流与学习...

目录

上传过程

构造 

---发现:

漏洞

例子:双写绕过

1 php的文件上传绕过 黑名单绕过

2 php文件上传的 00截断

3 iconv字符转换异常后造成了字符截断

4 文件后缀是白名单的时候的绕过

web服务器的解析漏洞绕过

apache(-httpd)

a 多后缀解析漏洞

b ImageMagic组件白名单绕过

nginx

IIS


上传过程

 

构造 

<?php
var_dump($_FILES); //显示上传的信息.
//所有的上传信息都是放到$_FILES超全局变量里面.
<form action="index.php" enctype="multipart/form-data" method="post">
    <input name="file" type="file"/>
    <input type="submit" value="upload"/>
</form>

强制上传---访问

---->返回上传的所有的信息.

<?php
var_dump($_FILES); //显示上传的信息.
//array(1) {
//    ["file"]=>
//  array(5) {
//        ["name"]=>
//    string(5) "1.txt"
//        ["type"]=>
//    string(10) "text/plain"
//        ["tmp_name"]=>
//    string(22) "C:\Windows\phpE5EF.tmp"
//        ["error"]=>
//    int(0)
//    ["size"]=>
//    int(6)
//  }
//}
$file = $_FILES['file'];    //file与html的name属性一致.
//echo $file['name'];

move_uploaded_file($file['tmp_name'],"./upload/".$file['name']);    //核心--移动上传的文件到指定的目录.
//移动文件,从临时目录里移动.(用就拿走,不用就删了)
//成功上传
//上传图片试一下也, 访问/upload/文件名字   -->成功实现图片上传

# 从数组里面拿字段:
//$file['name']; //上传的原始文件名称'
//$file['tmp_name']; //上传后,临时存放文件的路径.   (改不了)
//$file['type'];
echo '<br>';
echo $file['name'];
echo '<br>';
echo $file['tmp_name'];
echo '<br>';
echo $file['type'];

?>

---发现:

我们客户端只有name 和 type 可以改, tmp_name 字段是改不了的.

<form action="index.php" enctype="multipart/form-data" method="post">
    <input name="file" type="file"/>
    <input type="submit" value="upload"/>
</form>

<!--
文件上才能的参数名字 file 是否可以修改?		--可以改呀
$file = $_FILES['file'];
与php文件里的名字一样就行.
(保证两者是一致的就行,默认是file)
-------就是个名字,与前面参数的value值保持一致就行.
-->


漏洞

文件上传---对服务端的一个写操作

例子:双写绕过

一个文件上传按钮

会将php改为空
.php
.php2php
.phpphp
.pphphp		(中间加一个php---双写绕过)

1 php的文件上传绕过 黑名单绕过

1 php的文件上传绕过 黑名单绕过
后缀替换为空时,我们通过提交  1.pphphp 替换php为空后,得到1.php   成功写入木马

php不行时:上传 看看能不能解析.
php3 php5 phps phtml

php后缀替换为txt时,我们无法双写绕过 -----  1.pphphp  1.ptxthp(无法解析)

2 php文件上传的 00截断

2 php文件上传的 00截断
(非常古老,需要版本符合)考虑到吗能
  hello world
  hello空格world\n\00     (真实字符)\00为一个字符,表示结束.

  123.php  明显不让直接上传.
  123.php%00.jpg    ---那么后台判断的时候,取最后一个点后面的字符作为后缀  jpg  看起来是合法的文件名称.
  ./upload/123.php%00.jpg   ->  ./upload/123.php

  00字符截断需要的版本:
  php版本小于5.3.4  而最新的php版本已经达到8.3及以上
  java版本小于7u40,而最新的java版本已经达到20以上

3 iconv字符转换异常后造成了字符截断

3 iconv字符转换异常后造成了字符截断(老版本才适用)
  (函数)
php在文件上传场景下的文件名字符集转换时,可能出现截断问题
utf-8字符集--->  默认的字符编码范围的是 0x00-0x7f
iconv转换的字符不在上面这个范围之内,低版本的php会报异常,报了异常以后,后续字符不再处理,就会造成截断问题.

  123.php%df.jpg   123.php

php版本低于5.4才可以使用 


4 文件后缀是白名单的时候的绕过

web服务器的解析漏洞绕过

apache(-httpd)

a 多后缀解析漏洞
当我们上传apache不认识的后缀时,apahce会继续往前找后缀,找到认识的就解析执行.

          123.txt.ctfshow --> 123.txt  文本文档形式解析
          123.php.ctfshow --> 123.php  就交给中间件处理php脚本
b ImageMagic组件白名单绕过

...真鸡肋啊

 前提:
          目标主机按照了这个漏洞版本的 ImageMagic插件 <=3.3.0
          在php.ini中启用了这个插件,
          通过了php new Imageick 对象的方式来处理图片时,
          且 php版本大于 5.4时,
才可以使用,上传特定的svg图片,来实现组件的缺陷导致任意代码执行.

nginx

 基于错误的nginx配置 和 php-fpm配置

 nginx  基于错误的nginx配置 和 php-fpm配置,当我们访问  123.txt/123.php  ,如果是php后缀,就交给php-fpm,
         cgi.fix_pathinfo 默认开启.
         解析123.txt/123.php  ,当123.php不存在时,会找/前面的文件进行php解析,这时候,就成功解析了123.txt为php脚本了
         上传 123.txt ,访问时  /123.txt/123.php 即可.

 


IIS

iis6.0版本

 iis(windows自带--启用或关闭windows功能里)   Windows下使用
         iis6.0版本中,如果解析的目录名字为 xxx.asp
         那么里面的所有文件,都会按照asp来解析 123.txt  WindowsXP  Windows Server 2003
 ---->   (控制一个目录为xxx.asp 就行了)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【每日刷题Day85】

【每日刷题Day85】 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 125. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; 2. 43. 字符串相乘 - 力扣&#xff08;L…

【es】elasticsearch 自定义排序-按关键字位置排序

一 背景 要求es查询的结果按关键字位置排序&#xff0c;位置越靠前优先级越高。 es版本7.14.0&#xff0c;项目是thrift&#xff0c;也可以平替springboot&#xff0c;使用easyes连接es。 二 easyes使用 配easyes按官方文档就差不多了 排序 | Easy-Es 主要的一个问题是easy…

FPGA深入浅出IP核学习(一)-- vivado中clk IP MMCM核的使用

FPGA深入浅出IP核学习系列文章主要是自己关于学习FGPA IP核的学习笔记&#xff0c;供大家参考学习指正。 目录 前言 一、MMCM-IP核简介 二、MMCM-IP核使用 1.IP核配置 2.模块程序设计 总结 前言 本文主要参考B站野火FGPA相关学习视频、正点原子达芬奇FPGA开发指南和赛灵思官方用…

一文入门SpringSecurity 5

目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示​编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长&#xff0c;看源码的时候要见名知意&am…

docker笔记4-镜像理解

docker笔记4-镜像理解 一、镜像原理之联合文件系统二、镜像原理之分层理解三、commit镜像 一、镜像原理之联合文件系统 UnionFS&#xff08;联合文件系统&#xff09;: Union文件系统&#xff08;UnionFS&#xff09;是一种分层、轻量级并且高性能的文件系统&#xff0c;它支持…

深入了解路由器工作原理:从零开始的简单讲解

简介 在现代网络中&#xff0c;路由器扮演着至关重要的角色。它不仅连接了不同的设备&#xff0c;还确保数据能够准确地传输到目的地。本文将带你深入探讨路由器的工作原理&#xff0c;帮助网络基础小白们理解这一重要设备的基本功能。 路由器的构成 路由器是一种具有多个输入…

云计算实训12——配置web服务器、配置客户端服务器、配置DNS服务、实现DNS域名解析

一、配置web服务器 准备操作 首先在正式配置之前需要做以下操作 关闭防火墙 systemctl stop firewalld 永久关闭防火墙 systemctl disable firewalld 关闭selinux setenforce 0 永久关闭selinux vim /etc/selinux/config selinuxpermissive 还需要保证能够正常ping通www.bai…

使用uniapp开发小程序(基础篇)

本文章只介绍微信小程序的开发流程&#xff0c;如果需要了解其他平台的开发的流程的话&#xff0c;后续根据情况更新相应的文章,也可以根据uniapp官网的链接了解不同平台的开发流程 HBuilderX使用&#xff1a;https://uniapp.dcloud.net.cn/quickstart-hx.html 开发工具 开始…

【Django】在vscode中运行调试Django项目(命令及图形方式)

文章目录 命令方式图形方式默认8000端口设置自定义端口 命令方式 python manage.py runserver图形方式 默认8000端口 设置自定义端口

LIS系统源码,实验室管理信息系统LIS,.Net C#语言开发,支持DB2,Oracle,MS SQLServer等主流数据库

实验室管理信息系统LIS源码&#xff0c;采用.Net C#语言开发&#xff0c;C/S架构。支持DB2&#xff0c;Oracle&#xff0c;MS SQLServer等主流数据库。&#xff08;LIS系统全套商业源码&#xff0c;自主版权&#xff0c;多家大型综合医院应用案例&#xff0c;适合二次开发&…

【Android】ListView和RecyclerView知识总结

文章目录 ListView步骤适配器AdpterArrayAdapterSimpleAdapterBaseAdpter效率问题 RecyclerView具体实现不同布局形式的设置横向滚动瀑布流网格 点击事件 ListView ListView 是 Android 中的一种视图组件&#xff0c;用于显示可滚动的垂直列表。每个列表项都是一个视图对象&…

spring IOC DI --DI详解

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 文章目录 4.3 DI详解4.3.1属性注入4.3.2 构造方法注入4.3.3 Setter注入4.3.4 三种注入优缺点 4.4 Autowired 存在问题PrimaryQualifier 4.3 DI详解 依赖注入是一个过程,是指Ioc容器在创建Bean…

在 Android 上实现语音命令识别:详细指南

在 Android 上实现语音命令识别:详细指南 语音命令识别在现代 Android 应用中变得越来越普遍。它允许用户通过自然语言与设备进行交互,从而提升用户体验。本文将详细介绍如何在 Android 上实现语音命令识别,包括基本实现、带有占位槽位的命令处理,以及相关的配置和调试步骤…

C++:模板(函数模板,类模板)

目录 泛型编程 函数模板 函数模板格式 函数模板的原理 函数模板的实例化 类模板 类模板格式 类模板实例化 模板分为函数模板和类模板 在C中使用模板可以让我们实现泛型编程 泛型编程 如果我们需要实现一个加法add函数&#xff0c;那么会怎么实现呢&#xff1f; int…

AI学习记录 - 规范化输出对接现有系统的实例

假设我们有一个学生管理系统&#xff0c;通过prompt提示&#xff0c;格式化输出然后对接现有系统&#xff0c;也是通过react实现&#xff0c;因为这只是一个知识分享&#xff0c;没弄太复杂&#xff08;使用react实现&#xff09;。 学生管理系统 1、设计好prompt getMemory()…

大屏数据看板一般是用什么技术实现的?

我们看到过很多企业都会使用数据看板&#xff0c;那么大屏看板的真正意义是什么呢&#xff1f;难道只是为了好看&#xff1f;答案当然不仅仅是。 大屏看板不仅可以提升公司形象&#xff0c;还可以提升企业的管理层次。对于客户&#xff0c;体现公司实力和品牌形象&#xff0c;…

Linux shell编程学习笔记66:ping命令 超详细的选项说明

0 前言 网络信息是电脑网络信息安全检查中的一块重要内容&#xff0c;Linux和基于Linux的操作系统&#xff0c;提供了很多的网络命令&#xff0c;今天我们研究最常用的ping命令。 1 ping命令 的功能、格式和选项说明 1.1 ping命令 的功能 简单来说&#xff0c; ping 命令 会…

编写SpringBoot的自定义starter包

starter项目 先来看一下Starter的官方解释&#xff1a; Spring Boot Starter 是一种方便的依赖管理方式&#xff0c;它封装了特定功能或技术栈的所有必要依赖项和配置&#xff0c;使得开发者可以快速地将这些功能集成到Spring Boot项目中。Spring Boot官方提供了一系列的Star…

首次 Cloudberry Database 社区聚会 · 北京站,8月3日,诚邀

近期 Greenplum 源码归档及走向闭源在圈内讨论火热&#xff0c;原有开源用户面临断档风险。作为 Greenplum 衍生版和开源替代&#xff0c;Cloudberry Database 由原厂核心开发者打造&#xff0c;与其保持兼容&#xff0c;并且具备更新内核和更丰富功能。Cloudberry Database 逐…

代理协议解析:如何根据需求选择HTTP、HTTPS或SOCKS5?

代理IP协议是一种网络代理技术&#xff0c;可以实现隐藏客户端IP地址、加速网站访问、过滤网络内容、访问内网资源等功能。常用的IP代理协议主要有Socks5代理、HTTP代理、HTTPS代理这三种。代理IP协议主要用于分组交换计算机通信网络的互联系统中使用&#xff0c;只负责数据的路…