文件上传靶场(10--20)
目录
实验环境:
具体内容实现:
第十关(双写绕过):
第十一关:(%00截断,此漏洞在5.2版本中)
正确用法
错误用法
思路:
操作过程:
第十二关(都是00截断,只不过一个是post,一个是get):
第十三关:
第十六关(二次渲染(重要)):
实验环境:
upload-labs
实验函数:可以去php官网查看---php.net
小皮的php版本调低一点
具体内容实现:
第十关(双写绕过):
源码:
$is_upload = false; $msg = null; if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_name = str_ireplace($deny_ext,"", $file_name);$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 = UPLOAD_PATH . '文件夹不存在,请手工创建!';} }
源码分析:先来看一下这几个函数

先使用此函数去掉两边的空白字符以及转义的字符,然后下一个函数再将上传的文件名跟黑名单里面的作比较,如果相同,则从$file_name中删除对应部分
$file_name = str_ireplace($deny_ext,"", $file_name);这段代码试图替换掉不允许的扩展名,但问题是它只是简单地删除了这些扩展名,而不是验证文件名是否合法。
str_ireplace这个函数的工作模式是直接匹配这个字符串中的php字符串,像我们的pphphp中他把"php"匹配走了过后,还是仍然保留的是php所以就是此漏洞形成
思路形成,实践开始:
上传此文件:
![]()
查看upload文件夹
![]()
上传成功!下一关!
第十一关:(%00截断,此漏洞在5.2版本中)
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
这关的主要一个漏洞来自这里这串代码,我们知道get传参是可以手动修改的,我们先来介绍一下%00截断的原理:
0x00是字符串的结束标识符,攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。
正确用法
只有数据包中必须含有上传路径的情况下才可以用,比如本次测试中数据包中存在save_path: ../uploads/,那么攻击者可以通过修改path的值来构造paylod,并且PHP<5.3.29,且magic_quotes_gpc关闭

错误用法
只有文件名的情况下,是不能让%00截断生效的,因为只是文件名可控,即使通过00截断test.php%00.txt,但是此时经过服务器处理后,文件名仍然为test.php,不能通过对后缀的检测
思路:
使用 %00 可以绕过这种检测机制,这是因为 PHP 在处理字符串时会将 %00 解释为 NUL 字符,这可能导致某些函数提前终止字符串处理。所以当文件名为 test.php%00.jpg 时,PHP 会将 %00 解释为 NUL 字符,并在处理字符串时将其视为字符串的结束。因此substr($_FILES['upload_file']['name'], strrpos($_FILES['upload_file']['name'], ".") + 1) 会提取到 .jpg 而不是 .php。
操作过程:
这里主要是通过%00截断的,他是什么原理呢?请看下图,相信你看了就会懂:
所以我们在bs抓包给他改成web.php%00send一下:

先上传一个正确的jpg格式的文件,让服务器能够正常上传
然后打开bs抓包上传


打开upload查看上传情况:

第十二关(都是00截断,只不过一个是post,一个是get):
post传参跟get传参的区别就在于编码的格式不同,一个是传到地址栏进行url编码,%00=/0;而post传参是hex,需要抓包,然后直接修改他的16进制编码:

找20字段,因为我在上传之前在upload/后面打了个空格,URL编码是一种将字符集中的字符编码为仅包含字母、数字以及一些安全符号的方式。具体来说,空格在URL编码中被替换为%20,这里的20是空格字符在ASCII表中的16进制表示。
查看upload文件夹:

ok,继续下一关!
第十三关(图片码绕过):
先来看看源码和说明:

三种后缀原理和思路都是一样的,直接做一类,这里我们用.jpg的来做,注意:构造图片马的时候一句话木马应该加到图片后面,因为我们看源码可以知道,这个是要检测我们的图片头的,所以加到图片的最后面,就不会被检测,我们先用Windows来复制一个图片马,然后上传实现文件包含

只检测两个字节:
然后生成图片马:
copy /b 02.png + 2.php /a test02.png

打开图片看一下一句话木马还有没有:
![]()
有我们的一句话木马,好,开始上传文件,然后进行文件包含:
发现,他报了个这样的错,说明他试图在解析我们的php代码,ok,那我们继续换一张图片继续尝试(文件越小越好):
TNND试了7-8次都不行(怀疑是版本太高了,但是我这最低都是5.4),下一关,待会再说,第十四关,十五关一样的跳过:
emmm,查资料看到他说我php.ini那个配置文件里面的allow_url_include=off要修改为On,修改过后我们再次上传:

ok,成功了!!!
第十六关(二次渲染(重要)):
![]()
这个函数的作用通过查php的官方文档可以知道,他是将图片进行了重新排列组合,但是人的肉眼看到的新的图片是一样的,就是说他会将我的图片的一句话木马给打乱,所以我们需要借助工具(010editor)或者其他的对比工具,找出这个图片编码没有变化的位置,将一句话木马写到那个位置去,然后再接着上传:
思路大概就是这样,理论形成,实践开始:
上传前看看我们的图片马:
![]()
上传后:

看那个函数就知道我的一句话木马没了,所以我们需要去找到不变的位置,然后将一句话木马写进去,这样不管他怎么变化我的一句话木马都还是会留在哪里
借助010editor找到00区域或者空白区域:(找了很久没找到):
经过不懈努力终于找到了这片00区域,然后将我们的一句话木马加进去

然后再次将这个图片上传:我的一句话木马仍然还存在:ok


上传!!!完成此关!
相关文章:
文件上传靶场(10--20)
目录 实验环境: 具体内容实现: 第十关(双写绕过): 第十一关:(%00截断,此漏洞在5.2版本中) 正确用法 错误用法 思路: 操作过程: 第十二关…...
C# 检查系统是否开启 Hyper - V
C# 检查系统是否开启 Hyper - V 在使用 C# 开发应用程序时,有时需要判断系统是否开启了 Hyper - V 功能。Hyper - V 是 Windows 系统提供的一款虚拟化技术,以下为你介绍几种在 C# 中检查系统是否开启 Hyper - V 的方法。 方法一:通过查询系…...
【前端】BOM DOM
两天更新完毕,建议关注收藏点赞 友情链接: HTML&CSS&LESS&Bootstrap&Emmet Axios & AJAX & Fetch BOM DOM 待整理 js2 Web API 是浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM)。官方文档点击跳转 目录 BOMDOM…...
K8s 1.27.1 实战系列(十一)ConfigMap
ConfigMap 是 Kubernetes 中管理非敏感配置的核心资源,通过解耦应用与配置实现灵活性和可维护性。 一、ConfigMap 的核心功能及优势 1、配置解耦 将配置文件(如数据库地址、日志级别)与容器镜像分离,支持动态更新而无需重建镜像。 2、多形式注入 环境变量:将键值…...
计算机网络——IP、MAC、ARP
一、IP地址 1. 什么是IP地址? IP地址(Internet Protocol Address)是互联网中设备的唯一逻辑标识符,类似于现实生活中的“门牌号”。它分为 IPv4(32位,如 192.168.1.1)和 IPv6(128位…...
代码优化——基于element-plus封装组件:表单封装
前言 今天实现一个基于element-plus表单组件的二次封装,什么是二次封装?查看以下表单,传统表单组件是不是用<el-form>嵌套几个<el-form-item>即可实现,那么一个表单可不可以实现,传入一个对象给封装组件&a…...
C/C++中使用CopyFile、CopyFileEx原理、用法、区别及分别在哪些场景使用
文章目录 1. CopyFile原理函数原型返回值用法示例适用场景 2. CopyFileEx原理函数原型返回值用法示例适用场景 3. 核心区别4. 选择建议5. 常见问题6.区别 在Windows系统编程中,CopyFile和CopyFileEx是用于文件复制的两个API函数。它们的核心区别在于功能扩展性和控制…...
qt 多进程使用共享内存 ,加速数据读写,进程间通信 共享内存
Summary: 项目中我们有时需要使用共享内存共享数据,这样,数据不用进程IO读写,加进数据加载和落地; 程序退出时,再保存到本地;速度提升数十倍; Part1:QSharedMemory Windows平台下进程间通信…...
HTML左右分页2【搬代码】
HTML左右分页2 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>左右分页布局</title>&l…...
【鸿蒙开发】OpenHarmony调测工具hdc使用教程(设备开发者)
00. 目录 文章目录 00. 目录01. OpenHarmony概述02. hdc简介03. hdc获取04. option相关的命令05. 查询设备列表的命令06. 服务进程相关命令07. 网络相关的命令08. 文件相关的命令09. 应用相关的命令10. 调试相关的命令11. 常见问题12. 附录 01. OpenHarmony概述 OpenHarmony是…...
【贪心算法】简介
1.贪心算法 贪心策略:解决问题的策略,局部最优----》全局最优 (1)把解决问题的过程分成若干步 (2)解决每一步的时候,都选择当前看起来的“最优”的算法 (3)“希望”得…...
transformer模型介绍——大语言模型 LLMBook 学习(二)
1. transformer模型 1.1 注意力机制 **注意力机制(Attention Mechanism)**在人工智能中的应用,实际上是对人类认知系统中的注意力机制的一种模拟。它主要模仿了人类在处理信息时的选择性注意(Selective Attention)&a…...
【GPT入门】第11课 FunctionCall调用本地代码入门
【GPT入门】第11课 FunctionCall调用代码入门 1. 手撕FunctionCall2.代码3.functionCall的结果 1. 手撕FunctionCall 为了了解,funcationCall底层,手写一个functionCall多方法,并调用,体验 思路: 任务:让…...
LangChain教程 - Agent -之 ZERO_SHOT_REACT_DESCRIPTION
在构建智能 AI 助手时,我们希望模型能够智能地调用工具,以便提供准确的信息。LangChain 提供了 AgentType.ZERO_SHOT_REACT_DESCRIPTION,它结合了 ReAct(Reasoning Acting)策略,使得 LLM 可以基于工具的描…...
GStreamer —— 2.17、Windows下Qt加载GStreamer库后运行 - “播放教程 5:色彩平衡“(附:完整源码)
运行效果 介绍 亮度、对比度、色相和饱和度是常见的视频调整, 在 GStreamer 中统称为 Color Balance 设置。 本教程展示了: • 如何找出可用的色彩平衡通道 • 如何更改它们 允许访问颜色平衡设置。如果 元素支持这个接口,只需将其转发给应用…...
串口通信ASCII码转16进制及C#串口编程完整源码下载
在工业自动化、嵌入式系统及物联网以行业中,串口编程非常重要。 串口编程,重点在于串口数据通信和数据处理。 在C#中,System.IO.Ports命名空间提供了SerialPort类,用于实现串口通信。 串口程序的开发主要包括以下几点 1.引用命…...
解决vscode中出现“无法将pip项识别...“问题
问题 遇见问题如下: 查看pip 通过 winR ,输入 cmd,进入终端,搜索 where pip。 发现 pip 查不出来,然后进入文件资源管理器,搜索 Scripts 文件夹,如果没有找到可能是电脑没有下载 python。 点击…...
nacos下载及安装
下载官方最新稳定版 github下载较慢,推荐下面的下载链接 Nacos Server 下载 | Nacos 官网 点击下载和试用下载最新稳定版 Nacos Server 下载 | Nacos 官网 配置检查(可选) 默认情况下,Nacos 使用内置的 Derby 数据库&#x…...
C++从零实现Json-Rpc框架
文章目录 一、项目介绍1. 基本原理2. 涉及到的技术栈3. 最终实现的效果 二、 第三方库的介绍与使用1. JsonCpp库Json的数据格式JsonCpp介绍封装Json工具类 2. muduo库muduo库是什么Muduo库常见接口介绍 3. C11异步操作std::future 三、框架设计1. 服务端模块划分NetworkProtoco…...
rom定制系列------小米note3 原生安卓15 批量线刷 默认开启usb功能选项 插电自启等
小米Note 3搭载骁龙660处理器,1200万像素广角镜头、俗称大号版的小米6,官方最终版为12.0.1稳定版安卓9的固件。客户需要运行在安卓15的rom。根据原生官网的rom修改一些功能选项。以便客户操作需求。 定制资源说明 根据客户需求采用安卓15原生系统为底包…...
使用jest测试用例之入门篇
Jest使用 Jest 是由 Facebook 开发的一个 js 测试框架,jest 主要侧重于被用于做单元测试和集成测试 安装 npm i jest -D运行 **package.json**里面配置命令 // scripts添加测试脚本 {"test": "jest" /* 运行后便会使用 jest 执行所有的 .t…...
大数据学习(59)-DataX执行机制
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
YashanDB认证,YCA证书认证教程,免费证书,内含真题考试题库及答案——五分钟速成
目录 一.账号及平台注册登录流程 二.登录进行设备调试核验 三.考试(考完获取分数) 四.获取证书 五.题库及答案 一.账号及平台注册登录流程 1-点击这里进行账号注册(首次学习必须先注册,有账号之后可以直接在2号链接登录&#…...
消防行业如何借助 TDengine 打造高效的数据监控与分析系统
小T导读:本篇文章来自“2024,我想和 TDengine 谈谈”征文活动的优秀投稿,深入探讨了如何在消防行业中运用 TDengine 进行业务建模。文章重点介绍了如何通过 TDengine 的超级表、标签设计和高效查询功能,有效管理消防监控系统中的时…...
自然语言处理中的语音识别技术:从声波到语义的智能解码
引言 语音识别(Automatic Speech Recognition, ASR)是自然语言处理(NLP)的关键分支,旨在将人类语音信号转化为可处理的文本信息。随着深度学习技术的突破,语音识别已从实验室走向日常生活,赋能…...
010-Catch2
Catch2 一、框架简介 Catch2 是一个基于 C 的现代化单元测试框架,支持 TDD(测试驱动开发)和 BDD(行为驱动开发)模式。其核心优势在于: 单头文件设计:v2.x 版本仅需包含 catch.hpp 即可使用自然…...
TypeScript类:面向对象编程的基石
一、从现实世界到代码世界 想象你要建造一栋房子,首先需要一张设计蓝图——它定义了房屋的结构(几个房间)、功能(卧室/厨房)和特性(材料/颜色)。在TypeScript中,class就是这个设计蓝…...
Bad owner or permissions on ssh/config - 解决方案
问题 在Windows系统通过ssh连接远程服务器时报错: ssh [ssh_user][ip] Bad owner or permissions on C:\\Users\\[win_user]/.ssh/config原因 这是因为.ssh文件夹或.ssh/config文件的权限异常,当前Windows账号没有读写权限导致的。 Windows系统重装&a…...
C++之序列容器(vector,list,dueqe)
1.大体对比 在软件开发的漫长历程中,数据结构与算法始终占据着核心地位,犹如大厦的基石,稳固支撑着整个程序的运行。在众多编程语言中,数据的存储与管理方式各有千秋,而 C 凭借其丰富且强大的工具集脱颖而出ÿ…...
安卓Android与iOS设备管理对比:企业选择指南
目录 一、管理方式差异 Android Enterprise方案包含三种典型模式: Apple MDM方案主要提供两种模式: 二、安全防护能力 Android系统特点: 三、应用管理方案 四、设备选择建议 五、典型场景推荐 需求场景 推荐方案 六、决策建议要点…...
