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

news2024/11/25 0:45:15

方法一:特殊后缀绕过:

一、什么是特殊后缀绕过

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


二、代码审计

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


$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.coloradmin.cn/o/1452510.html

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

相关文章

【IO流】32.IO流

IO流 1. IO流1.1 概述1.2 作用1.3 分类1.4 注意事项 1. IO流 IO流:存储和读取数据的解决方案。 I:input O:output 流:像水流一样传输数据 1.1 概述 IO(Input/Output)流是计算机程序用于与外部设备进行数据…

CSS之margin塌陷

margin塌陷 CSS中的外边距塌陷(Margin Collapse)问题是指在垂直方向上,当两个或多个块级元素的边距相遇时,它们之间的距离不是它们各自边距的总和,而是其中的最大值。这种现象主要出现在块级元素的上下外边距之间。 &…

【测试】测试用例篇

目 录 一. 设计测试用例的万能公式(六个)二.设计测试用例的具体方法1.等价类2.边界值3.因果图(判定表)4.场景设计法5.正交法6.错误猜测法 一. 设计测试用例的万能公式(六个) 设计测试用例的万能公式 测试用例的意义是帮助测试人员了解:测什…

智慧公厕适合的场合

智慧公厕是以现代科技手段为基础,融合智能化、信息化和人性化设计的公共厕所,旨在提供更舒适、更便捷的如厕体验。智慧公厕适用于各种场合,包括城市公共厕所、旅游景区公共厕所、美丽乡村公共厕所、机场公共厕所、高铁和火车站公共厕所、高速…

el-upload组件的简单使用

最近公司的一个二期项目,开始要求复刻原有一期的功能页面。原先一期又不打算继续维护了,源码都没有。页面基本都涉及到了文件上传,以前很少使用到这个组件,公司有现成的表单设计器,文件上传都在组件里面拖动上传。在这…

w28DVWA-csrf实例

DVWA-csrf实例 low级别 修改密码&#xff1a;修改的密码通过get请求&#xff0c;暴露在url上。 写一个简单的html文件&#xff0c;里面伪装修改密码的文字&#xff0c;代码如下&#xff1a; <html><body><a href"http://dvwa:7001/vulnerabilities/csr…

浅谈语义分割、图像分类与目标检测中的TP、TN、FP、FN

语义分割 TP&#xff1a;正确地预测出了正类&#xff0c;即原本是正类&#xff0c;识别的也是正类 TN&#xff1a;正确地预测出了负类&#xff0c;即原本是负类&#xff0c;识别的也是负类 FP&#xff1a;错误地预测为了正类&#xff0c;即原本是负类&#xff0c;识别的是正类…

archLinux安装记录

archLinux安装记录 基于wsl的arch 启用wsl 首先&#xff0c;按Win S搜索启用或关闭Windows功能&#xff08;Turn Windows features on or off&#xff09;,打开虚拟机平台和WSL&#xff0c;并重启Windows。 重启后&#xff0c;进入Windows设置&#xff0c;检查更新。 更新完…

Lua内存管理策略

传统的内存管理策略主要分为两种&#xff1a;引用计数&#xff0c;和垃圾回收。相比后者每一段时间执行一次回收周期&#xff0c;前者是对于每一个变量都维护被引用数的策略。对于Lua这种轻量化语言而言&#xff0c;占据大内存的开销是极力避免的&#xff0c;而前者的方式显然是…

自动化测试-RIDE编写自动化脚本

自动化脚本软件测试的必修内容&#xff0c;是自动化测试的核心&#xff0c;脚本的逻辑严谨性、可维护性非常重要&#xff0c;优秀的自动化脚本需要能兼顾用例的正确有效性和自动化测试的效率&#xff0c;本篇文章将介绍如何用RIDE写自动化脚本。我们将深入探讨RIDE的具体用法&a…

websocket数据帧格式

客户端、服务端数据的交换&#xff0c;离不开数据帧格式的定义。因此&#xff0c;在实际讲解数据交换之前&#xff0c;我们先来看下WebSocket的数据帧格式。 WebSocket客户端、服务端通信的最小单位是帧&#xff08;frame&#xff09;&#xff0c;由1个或多个帧组成一条完整的消…

【Node.js】path 模块进行路径处理

Node.js 执行 JS 代码时&#xff0c;代码中的路径都是以终端所在文件夹出发查找相对路径&#xff0c;而不是以我们认为的从代码本身出发&#xff0c;会遇到问题&#xff0c;所以在 Node.js 要执行的代码中&#xff0c;访问其他文件&#xff0c;建议使用绝对路径 实例&#xff1…

比特币 P2PKH、P2SH

标准脚本P2PKH、P2SH 区块链重要基础知识7-1——标准脚本P2PKH、P2SH-CSDN博客 比特币中P2SH(pay-to-script-hash)多重签名的锁定脚本和解锁脚本 https://www.cnblogs.com/itlgl/p/10419325.html

如何设置HTML页面文字格式?

如何设置HTML页面文字格式&#xff1f; HTML 里的文本元素真的好有趣&#xff0c;它们能让文字呈现出不同的样式和含义。我决定深入探索一下&#xff0c;看看这些元素到底有哪些魔法。 HTML 文本格式化初探 在 HTML 里&#xff0c;想要改变文本的样式&#xff0c;就得靠那些…

【机器学习笔记】 9 集成学习

集成学习方法概述 Bagging 从训练集中进行子抽样组成每个基模型所需要的子训练集&#xff0c;对所有基模型预测的结果进行综合产生最终的预测结果&#xff1a; 假设一个班级每个人的成绩都不太好&#xff0c;每个人单独做的考卷分数都不高&#xff0c;但每个人都把自己会做的…

JDK8新增的时间

设计更合理&#xff0c;功能更丰富&#xff0c;使用更方便&#xff0c;都是不可变的对象&#xff0c;修改后会返回新的事件对象不会丢失最开始的时间&#xff0c;线程安全&#xff0c;能精确到毫秒、纳秒。 这三个类都有一个静态方法now()&#xff1a;获取系统当前时间对应的该…

爬虫-华为云空间备忘录导出到docx-selenium控制浏览器行为-python数据处理

背景适用情况介绍 老的荣耀手机属于华为云系统&#xff0c;家里人换了新荣耀手机属于荣耀云系统无法通过云空间将备忘录转移到新手机&#xff0c;不想让他们一个一个搞&#xff0c;于是整了一晚上想办法爬取下来。从网页抓取下来&#xff0c;然后存到docx文档中&#xff08;包…

不花一分钱,在 Mac 上跑 Windows(M1/M2 版)

这是在 MacOS M1 上体验最新 Windows11 的效果&#xff1a; VMware Fusion&#xff0c;可以运行 Windows、Linux 系统&#xff0c;个人使用 licence 免费 安装流程见 &#x1f449; https://zhuanlan.zhihu.com/p/452412091 从申请 Fusion licence 到下载镜像&#xff0c;再到…

phpstrom创建thinkphp项目

安装php和composer 参考 安装phpstrom 创建项目 查看thinkphp版本 https://packagist.org/packages/topthink/think 打开所在项目编辑配置 即可调试运行

软件工程师,超过35岁怎么办

概述 随着科技行业的飞速发展&#xff0c;软件开发工程师的职业道路充满了各种机遇和挑战。对于已经在这个行业摸爬滚打了十多年的软件开发工程师来说&#xff0c;当他们步入35岁这个年纪时&#xff0c;可能会感到一些迷茫和焦虑。许多人担忧&#xff0c;在以创新、活力、快速迭…