《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等。…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...