文件上传漏洞--Upload-labs--Pass03--特殊后缀与::$DATA绕过

方法一:特殊后缀绕过:

一、什么是特殊后缀绕过

源代码中的黑名单禁止一系列后缀名 之外的后缀,称之为‘特殊后缀名’,利用其来绕过黑名单,达到上传含有恶意代码的文件的目的。


二、代码审计

接下来对代码逐条拆解进行分析:


$file_name = trim($_FILES['upload_file']['name']);

 $_FILES是一个超全局变量,用于存储通过HTTP POST上传的文件信息。

‘upload_file’是上传文件的字段名。

['name']为获取上传文件的名称。

trim()函数:用于 去除 字符串前后的空格。

这条代码的作用为:将上传的文件名赋值给 $file_name,并去除其前后两端的空格。


$file_name = deldot($file_name);

 deldot()函数:全名 delete dot,用于去除文件末尾的点 。

这条代码的作用为:去除文件名中所有的.,并赋值给 $file_name。


$file_ext = strrchr($file_name, '.');

strchr()函数:用于查找字符串中最后一次出现指定字符的位置,并返回从该位置开始到字符串末尾的子字符串。

这句代码的作用为:从文件名中提取出 拓展名,并将其赋值给 $file_ext。


$file_ext = strtolower($file_ext);

strtolower()函数:顾名思义,全名 string to lower,将字符串中的所有字符转换为小写,防止不法分子利用大小写漏洞上传含有恶意代码的文件。

这句代码的作用为:将文件拓展名字符串 全部转化为小写。


$file_ext = str_ireplace('::$DATA', '', $file_ext);

str_ireplace()函数:替换函数,将 $file_ext字符串中的 ::$DATA 替换为 空字符。防止$::DATA绕过。


$file_ext = trim($file_ext);

 trim()函数在上文已经做出过解释,不再赘述。

这句代码的作用为:去除 拓展名$file_ext首尾的空字符。


if(!in_array($file_ext, $deny_ext))

这句代码的作用为:判断上传文件的拓展名 $file_ext 是否在黑名单 $deny_ext 中。


$temp_file = $_FILES['upload_file']['tmp_name'];

['tmp_name']表示上传文件的 临时文件名。

$temp_file作为一个变量,用来存储临时文件名。

那么临时文件名有什么作用呢?


$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;

 UPLOAD_PATH 是一个常量,表示上传文件的存储路径。

date("YmdHis") 获取当前时间,格式为年月日时分秒(例如:20220101123456)。

rand(1000,9999):生成一个四位的随机数。

$file_ext:表示前面获取到的上传文件的 拓展名。

这句代码的作用为:将上传文件的 存储路径,当前时间,一个四位随机数,和文件拓展名 拼接起来,生成一个唯一路径,并将其赋值给 $img_path。


if (move_uploaded_file($temp_file,$img_path)) {$is_upload = true;} else {$msg = '上传出错!';}

首先,代码利用 move_upload_file()函数将 临时文件$temp_file 移动到指定路径 $img_path上。 如果文件上传成功,返回true,反之则报错。


 三、通关思路


思路:根据源代码中的黑名单,我们只需要让提交文件的后缀名改为黑名单之外的后缀即可。如:php3,php5,phtml等。但是我们需要让我们的 Apache 能够解析这些后缀的文件,并且我们的php版本不可以带nts。

Apache配置方法:1、利用记事本打开Apache配置文件。

 2、加上如图这段代码:


通关步骤:

1、上传 test.php,利用 Burpsuite 进行抓包,修改filename为php3或php5或phtml。

2、放包,上传成功,新标签页打开即可,若php版本中带有nts,则可能会出现问题,所以不推荐此方法。 


方法二:::$DATA绕过(recommend)

一、什么是::$DATA

在windows操作系统中,当你看到文件名后面跟着 ::$DATA 时,它表示一个文件的附加数据流,数据流是一种在文件内部存储额外数据的机制。

在文件上传漏洞中,::$DATA可以简单理解为 一个通行证,可以冲破黑名单的防线。

二、通关思路

纵使源代码中对字符串中的 ::$DATA 进行了删除,那么我们可以用反删除的知识来破解它,比如双写 ::$DATA。

1、上传test.php,利用 Burpsuite 进行抓包,添加并双写 ::$DATA。


2、放包,文件上传成功。


3、在新标签页中进行打开,出现403,这是因为没有去除 url 中的 ::$DATA。

删除之后,可以正常显示。

 

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

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

相关文章

iocp简单例子

首先说明:纯iocp使用的例子看:纯iocp例子(里面的代码可能无法运行,但是下面的代码一定可以运行,可以看看它里面的 PostQueuedCompletionStatus函数的使用,参考参考然后拿出来放到下面的代码里测试&#xff…

VQ23 请按城市对客户进行排序,如果城市为空,则按国家排序(order by和case when的连用)

代码 select * from customers_info order by (case when city is null then country else city end)知识点 order by和case when的连用

VQ30 广告点击的高峰期(order by和limit的连用)

代码 select hour(click_time) as click_hour ,count(hour(click_time)) as click_cnt from user_ad_click_time group by click_hour order by click_cnt desc limit 1知识点 order by和limit的连用,取出所需结果 YEAR() 返回统计的年份 MONTH() 返回统计的月份 D…

解决Ubuntu下网络适配器桥接模式下ping网址不通的情况

问题反应:ping不通网址 打开虚拟机中的设置,更改网络适配器为NAT模式 确定保存更改之后,退出输入如下命令。 命令1: sudo /etc/network/inferfaces 命令2: sudo /etc/init.d/network/ restart

《生产调度优化》专栏导读

文章分类 生产调度优化问题入门相关问题求解调度问题求解效率探讨相关论文解读 生产调度优化问题入门 文章包含重点简述生产车间调度优化问题两种常用的FJSP模型解析FJSP问题的标准测试数据集的Python代码解析FJSP标准测试数据代码 相关问题求解 文章求解器问题类型【作业车…

使用 C++23 从零实现 RISC-V 模拟器(5):CSR

👉🏻 文章汇总「从零实现模拟器、操作系统、数据库、编译器…」:https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc RISC-V为每个hart定义了一个独立的控制状态寄存器(CSR)地址空间,提供了4…

小程序列表下拉刷新和加载更多

配置 在小程序的app.json中,检查window项目中是否已经加入了"enablePullDownRefresh": true,这个用来开启下拉刷新 "window": {"backgroundTextStyle": "light","navigationBarBackgroundColor": &q…

unity C#中的封装、继承和多态简单易懂的经典实例

文章目录 封装 (Encapsulation)继承 (Inheritance)多态 (Polymorphism) C#中的封装、继承和多态是面向对象编程(OOP)的三大核心特性。下面分别对这三个概念进行深入解释,并通过实例来说明它们在实际开发中的应用。 封装 (Encapsulation) 实例…

【北京航空航天大学】【信息网络安全实验】【实验一、密码学:DES+RSA+MD5编程实验】

信息网络安全实验 实验一、DES RSA MD5 一、实验目的 1. 通过对DES算法的代码编写,了解分组密码算法的设计思想和分组密码算法工作模式; 2. 掌握RSA算法的基本原理以及素数判定中的Rabin-Miller测试原理、Montgomery快速模乘(模幂)算法,了解公钥加密体制的优缺点及其常…

gem5学习(21):索引策略——Indexing Policies

目录 一、集合关联(Set Associative) 二、倾斜关联(Skewed Associative) 索引策略确定基于地址将一个块映射到哪个位置。 索引策略的最重要方法是getPossibleEntries()和regenerateAddr(): getPossibleEntries()用…

数组转二叉树的一种方法-java(很特殊)

上代码 Node节点的代码 public class ThreadNode {private int data;private ThreadNode left;private boolean leftTag; // 左子节点是否为线索private ThreadNode right;private boolean rightTag; // 右子节点是否为线索// ... 省略get和set方法// ... 省略构造方法// ... …

【MySQL】学习多表查询和笛卡尔积

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-N8PeTKG6uLu4bJuM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Linux命令-netstat

用于端口和服务之间的故障排除 格式:netstat [常用参数] | grep 端口号/进程名称 -n:显示接口和端口的编号 -t:显示TCP套接字 -u:显示UDP套接字 -l:显示监听中的套接字 -p:显示端口对应的进程信息 -a&a…

一些常见的激活函数介绍

文章目录 激活函数1. sigmoid2. relu3. leakyReLu4. nn.PReLU5. nn.ReLU66. Softplus函数7. softmin, softmax, log softmax8. ELU 激活函数 1. sigmoid https://zhuanlan.zhihu.com/p/172254089 sogmoid函数的梯度范围在 0-0.25, 容易梯度消失 2. relu ReLU激…

1.函数模板基础

1.1函数模板作用&#xff1a; 建立一个通用函数&#xff0c;其函数返回值类型和形参类型可以不具体指定&#xff0c;用一个虚拟的类型来代表&#xff0c;提高复用性 1.2语法&#xff1a; //第一种 template <typename T> 函数声明或定义//第二种 template <class T&…

AI趋势(06) Sora,AI对世界的新理解

说明&#xff1a;使用 黄金圈法则学习和解读Sora&#xff08;what、why、how&#xff09; 1 Sora是什么&#xff1f; 1.1 Sora的基本解读 Sora是OpenAl在2024年2月16日发布的首个文本生成视频模型。该模型能够根据用户输入的文本自动生成长达60秒的1080p复杂场景视频&#xf…

Android稳定性相关知识

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、相关方法论3.1 crash3.2 性能3.3 高…

Python:异常处理

异常处理已经成为判断一门编程语言是否成熟的标准&#xff0c;除传统的像C语言没有提供异常机制之外&#xff0c;目前主流的编程语言如Python、Java、Kotlin等都提供了成熟的异常机制。异常机制可以使程序中的异常处理代码和正常业务代码分离&#xff0c;保证代码更加优雅&…

Linux中MySQL表名与@TableName中大小写关系

在使用SpringBoot时&#xff0c;我们普遍会使用注解&#xff0c;实体类中使用注解TableName指明表&#xff0c;以下是TableName的一些注意事项。 【说明】 在MySQL中&#xff0c;表名的大小写处理与操作系统和数据库服务器的配置有关。MySQL默认是在Linux系统上区分大小写的&…

2024年重磅消息:来自OpenAI发布的视频生成模型Sora

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…