Upload-labs靶场通关

之前搭好了靶场,Upload-labs 靶场搭建 及一句话木马的原理与运用-CSDN博客

今天开始通关并写详细流程

Pass-1

来到靶场的第一关

先随便上传php 代码

点击上传

发现文件类型被限制了

方法1:

改文件后缀为合法文件(.jpg .png .gif),再抓包修改回php文件

例如我将它改为.jpg

改完后打开bp抓包,然后点击上传

抓到包后修改文件后缀 .jpg为.php

改为

 然后发送,回到上传页面,因为木马已经经过前端验证又改为php文件,所以木马被执行

右键上传成功的图片,新标签页打开

其实这里刚开始我上传的一句话木马是<?php @eval($_POST['a']);?>

但上传打开图片链接就出现服务器错误,无法显示上传的文件

这里说一下为什么要先改后缀再上传抓包改后缀

因为文件上传以后数据包是从客户端发往服务端,而bp抓包是相当于在服务端抓,js前端验证是在客户端进行的,这样一来因为这题是js前端验证,木马文件要先进行js前端验证才能进行抓包,而.php文件后缀是被js禁止上传的,也就是说该木马文件连第一步前端验证都没通过,抓包是抓不了的。(所以要先改为jpg后缀绕过js前端验证,再进行抓包改为php就能上传木马成功)

后来在别处得知运用到<?php phpinfo();?>

<?php phpinfo();?> 是一段简单的 PHP 代码,用于显示当前服务器的 PHP 配置信息

<?php ... ?>PHP 的起始和结束标签,包裹其中的 PHP 代码。

phpinfo();PHP 内置函数调用后会生成一个完整的 HTML 页面,包含服务器的 PHP 环境信息

显示 PHP 配置
包括:

PHP 版本、运行模式(如 CLI 或 Apache 模块)。

编译选项(如支持的扩展、安全设置)。

服务器环境变量(如 $_SERVER 内容)。

已加载的扩展(如 MySQL、GD 库等)。

php.ini 的配置参数(如内存限制、上传文件大小等)

调试用途
开发时常用它检查服务器是否正常加载了特定扩展(如 curlpdo_mysql),或确认配置(如 error_reporting)是否生效

如果想限制显示的信息,可以用参数:

<?php phpinfo(INFO_MODULES); // 仅显示已加载的扩展 ?>

与一句话木马的区别

核心区别对比表

特性phpinfo()一句话木马
主要功能显示服务器配置信息提供远程代码执行能力
危险性低(信息泄露)极高(系统控制)
典型用途调试/信息收集权限维持/渗透
代码复杂度单函数调用常含加密/混淆逻辑
检测难度通常被允许安全软件会重点监控
 

方法2:

可以F12键打开查看器可以看到前端验证的代码

这里其实禁用前端就可以了 (既然Javascript过滤了文件,那把Javascript禁用了就没办法过滤,也就可以上传了 )

打开设置里的调试程序,勾选禁用Javascript

这个是把前端所有的js函数都禁用了(为了浏览器以后能正常使用,要记得过关以后把Javascript开启)

Pass-2

这题同样先上传文件看看

发现提示文件类型不正确,那就是改Content-type就可以

同样选择文件后抓包上传

然后改文件类型,把改为image/jpeg试试

上传成功打开图片

Pass-3

这题上传了php文件后发现是黑名单验证,禁止上传四种后缀的名单

现在想办法绕过,在网上查了一下后了解到在某些特定的环境中某些特殊后缀会被当做php文件解析php、php2、php3 4 5 6 7以及pht、phtm、phtml,然后用php5试了一下,先将之前的<?php phpinfo();?>文件名改一下

上传后同样复制图片地址,然后另建访问,但发现是空白页

弄了好一会不知道怎么回事,后来在一个博主那里了解到使用phpstudy搭建的upload-labs可能无法加载出这个界面,我的就是,而他给出的方法是修改#AddType application/x-httpd-php .php .phtml为AddType application/x-httpd-php .php .phtml .php5 .php3,然后别忘了#要删除,然后就可以正常访问图片地址

我按他说的试了一下,先打开phpstudy的配置文件下的httpd-conf配置文件

然后修改

保存过后就可以访问图片路径

Pass-4

这题着实不会,因为过滤了太多文件

乍一看还好,往后一看更多

这里参照了别人的博客,利用.htaccess,可以重写文件解析绕过,大概做法如下

先写一个文件命名为.htaccess,这个文件内容的意思是告诉apache遇到jpg文件时按照php去解析

再创建一个php测试文件

最后分别将.htaccess 和xxx.jpg文件上传,然后用浏览器访问xxx.jpg即可

Pass-5

查看源码,发现过滤了更多后缀,这次连.htaccess文件也被过滤了

但看到源码中过滤数组有小写和大小写混合,但没有纯大写,而下面也没有转小写

因为php文件名是不区分大小写的,所以直接上传

Pass-6

这题先上传上一题的文件,发现果然被过滤

然后查看源码,发现过滤这块有点不一样,这题相比上一题没有trim()函数对文件名进行去空格处理

而关于文件上传的题之前在deepseek上了解到 在windows环境下,系统会自动去除文件名后面的点和空格,而在linux环境下,会保留文件名的特殊字符,我的环境在windows搭建成的,所以就好解决了  方法就是抓包添加空格,进而消耗掉过滤数,然后windows就会帮我删掉空格,那么完成

先上传刚刚的文件,然后抓包添加空格放行即可

Pass-7

查看关卡源码,对比第四关,发现少了删除文件末尾的点

第六关一样,windows文件后缀名不能加’.',一样使用burp抓包然后后缀加一个点

Pass-8

查看源码,发现相比之前的代码少了删除文件末尾的点

所以同样上传之前的php文件,windows文件后缀名不能加. 所以进行bp抓包 ,然后在后缀加.

最后放行即可

Pass-9

首先查看源码发现这题少了去除字符串::$DATA

所以直接使用bp抓包在文件名后缀加::$DATA,最后放行

Pass-10

这一题之前的所有方法都用不了了,但需要注意的是,没有循环验证,代码只执行一次

既然这样先双写试试看,然后抓包发现的确是将一个php去掉以后拼接了一个新的php

最后放行复制链接访问解析即可

Pass-11

这题注意到save_path这个可控变量,后面还有一个后缀名需要绕过

这里需要知道%00截断但要注意使用这个有两个条件

php版本小于5.3.4

php的magic_quotes_gpc为OFF状态

然后解释一下00截断:php在处理文件名或路径时,如果遇到URL编码的%00,它会被解释为一个空字节(即ASCLL值为0),在php5.3以前,php会将这个空字节转换为\000的新式,然后就会导致文件名被截断,只保留%00之前的部分,然后可能会导致文件被保存到另一个意外的位置从而产生安全风险(php语言的底层为c语言,\0在C语言中是字符串的结束符,所以导致00截断的发生)

接下来注意到img_path是通过get传参传递的,所以不妨将这个路径改为upload/Untitled.php%00,则不管后面是什么东西都会被截掉,然后经过move_upload_file函数将临时文件重新复制给截断之前的文件路径,但还是要上传jpg文件以保证后续程序的运行

接下来就是上传 抓包 修改 放行

Pass-12

这一题发现和上一题不一样,上一题是get传参,这一题是post传参

上一关%00经过url编码,而post不会自行编码,所以应该要对%00进行urldecode编码,可直接利用bp中的快捷键convert selection进行快速url编码

然后我上传的文件类型不正确,Content-type也需要改一下,改为image/jpeg或image/png

改完后send即上传成功

Pass-13

这题的图片马其实就是在一张图片中写入一句话改为php文件然后与另一张图片合成新图片,上传该图片利用php的文件包含特性将图片以php进行解析

先将一张图片写入一句话

使用终端合成新图片再上传,最后利用文件包含漏洞读取即可

copy liu.jpg /b + liu.php /a new.jpg

 当然我也使用了bp发现直接抓包加入一句话要方便得多

Pass-14

检查源码发现pass检查图标内容开头2个字节

也不清楚能干嘛,就像之前一样先找一张正常的图片然后加入phpinfo

然后发现上传成功

pass-15

这题看了源码后看提示

然后注意到getimagesize()函数,具体解析在这里

php getimagesize 函数 – 获取图像信息 | 菜鸟教程

然后同样上传上一题的图片马即可

Pass-16

查看提示有重新渲染,先看看源码

imagecreatefromjpeg()函数,二次渲染是由Gif文件或URL创建一个新图像。成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,上传图片失败。

按照前几关的方式上传,可以上传,但是包含漏洞无法解析。原因就是二次渲染将图片马里面的php代码删除了。接下来把原图和修改后的图片进行比较,看那里没有被渲染,在这里插入php代码。这里使用beyond compare。

把上传的图片右键保存本地,看有没有被渲染的地方,加入php代码

再重新上传

Pass-17

提示需要进行代码审计,先看看源码

发现如果上传的符合它的白名单,那就进行重命名,如果不符合,直接删除!解析的机会都没有,这让我想到了条件竞争,如果我在它删除之前就访问这个文件,他就不会删除了。接下来直接实验
上传一个php文件,然后burp抓包发到爆破模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[GN] Python3基本数据类型 -- 与C的差异

Python3 面向对象 文章目录 Python3的基本数据类型6个标准的数据类型NumbersStringListtupleSetsDictionaries Python运算符逻辑 运算符成员运算符身份运算符 Python3 数字Python3 序列序列切片序列相加序列相乘序列相关内置函数 Python3 列表访问列表的值更新列表删除列表元素…

MCP over MQTT:EMQX 开启物联网 Agentic 时代

前言 随着 DeepSeek 等大语言模型&#xff08;LLM&#xff09;的广泛应用&#xff0c;如何找到合适的场景&#xff0c;并基于这些大模型构建服务于各行各业的智能体成为关键课题。在社区中&#xff0c;支持智能体开发的基础设施和工具层出不穷&#xff0c;其中&#xff0c;Ant…

AI助力高效PPT制作:从内容生成到设计优化

随着人工智能技术的不断发展&#xff0c;AI在各个领域的应用日益普及&#xff0c;尤其是在文档和演示文稿的创建过程中。PowerPoint&#xff08;PPT&#xff09;作为最常用的演示工具之一&#xff0c;借助AI的技术手段&#xff0c;可以极大地提高制作效率并提升最终呈现效果。在…

学透Spring Boot — 009. Spring Boot的四种 Http 客户端

目录 常见的HttpClient Spring 提供的HttpClient RestTemplate Spring 提供的模板类 XXXTemplate RestTemplate的使用 RestTemplate的使用技巧 RestTemplate的问题 RestClient RestClinet的基本使用 RestClient的自动配置 RestClient 序列化对象 异常处理 onStatus …

leetcode117 填充每个节点的下一个右侧节点指针2

LeetCode 116 和 117 都是关于填充二叉树节点的 next 指针的问题&#xff0c;但它们的区别在于 树的类型 不同&#xff0c;117与 116 题类似&#xff0c;但给定的树是 普通二叉树&#xff08;不一定完全填充&#xff09;&#xff0c;即某些节点可能缺少左或右子节点。 树的结构…

软考系统架构师 — 4 嵌入式软件

目录 4.1 考点分析 4.2 嵌入式微处理器 4.2.1嵌入式微处理器体系结构 5.2.2 嵌入式微处理器分类 4.2.3 多核处理器 4.3 嵌入式软件 4.4 嵌入式系统 4.4.1 嵌入式系统的组成 4.4.2 嵌入式系统分类 4.4.3 嵌入式数据库系统DBMS 4.4.4 嵌入式操作系统OS 4.4.5 嵌入式实…

RocketMQ 中的 ProducerManager 组件剖析

一、引言 在分布式系统的消息传递领域&#xff0c;RocketMQ 以其高性能、高可用性和强大的扩展性脱颖而出。ProducerManager 作为 RocketMQ 中的一个关键组件&#xff0c;在消息生产环节发挥着至关重要的作用。它负责管理消息生产者&#xff08;Producer&#xff09;的生命周期…

k8s进阶之路:本地集群环境搭建

概述 文章将带领大家搭建一个 master 节点&#xff0c;两个 node 节点的 k8s 集群&#xff0c;容器基于 docker&#xff0c;k8s 版本 v1.32。 一、系统安装 安装之前请大家使用虚拟机将 ubuntu24.04 系统安装完毕&#xff0c;我是基于 mac m1 的系统进行安装的&#xff0c;所…

深度学习数据集划分比例多少合适

在机器学习和深度学习中&#xff0c;测试集的划分比例需要根据数据量、任务类型和领域需求灵活调整。 1. 常规划分比例 通用场景 训练集 : 验证集 : 测试集 60% : 20% : 20% 适用于大多数中等规模数据集&#xff08;如数万到数十万样本&#xff09;&#xff0c;平衡了训练数…

【TS学习】(15)分布式条件特性

在 TypeScript 中&#xff0c;分布式条件类型&#xff08;Distributive Conditional Types&#xff09; 是一种特殊的行为&#xff0c;发生在条件类型作用于裸类型参数&#xff08;Naked Type Parameter&#xff09; 时。这种特性使得条件类型可以“分布”到联合类型的每个成员…

NSSCTF [HGAME 2023 week1]simple_shellcode

3488.[HGAME 2023 week1]simple_shellcode 手写read函数shellcode和orw [HGAME 2023 week1]simple_shellcode (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file vuln vuln: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpret…

PostgreSQL的扩展(extensions)-常用的扩展-pg_dirtyread

PostgreSQL的扩展&#xff08;extensions&#xff09;-常用的扩展-pg_dirtyread pg_dirtyread 是 PostgreSQL 的一个特殊扩展&#xff0c;它允许读取已被删除但尚未被 VACUUM 清理的数据行&#xff0c;是数据恢复的重要工具。 原理&#xff1a; pg_dirtyread 通过直接访问表的…

linux3 mkdir rmdir rm cp touch ls -d /*/

Linux 系统的初始目录结构遵循 FHS&#xff08;Filesystem Hierarchy Standard&#xff0c;文件系统层次标准&#xff09;&#xff0c;定义了每个目录的核心功能和存储内容。以下是 Linux 系统初始安装后的主要目录及其作用&#xff1a; 1. 核心系统目录 目录用途典型内容示例…

Bazel中的Symbol, Rule, Macro, Target, Provider, Aspect 等概念

学习Bazel &#xff0c;就要学习Bazel 的规则定义&#xff0c; 弄清各个概念是重要的一个步骤。 在 Bazel 规则定义中&#xff0c;Symbol、Rule 和 Macro 是常见的概念。除此之外&#xff0c;Bazel 还有 Target、Provider、Aspect Repository、Package、 Workspace、 Configura…

深入探究 Hive 中的 MAP 类型:特点、创建与应用

摘要 在大数据处理领域,Hive 作为一个基于 Hadoop 的数据仓库基础设施,提供了方便的数据存储和分析功能。Hive 中的 MAP 类型是一种强大的数据类型,它允许用户以键值对的形式存储和操作数据。本文将深入探讨 Hive 中 MAP 类型的特点,详细介绍如何创建含有 MAP 类型字段的表…

基于Java的区域化智慧养老系统(源码+lw+部署文档+讲解),源码可白嫖!

摘 要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;区域化智慧养老系统当然不能排除在外。区域化智慧养老系统是在实际应用和软件工程的开发原理之上&#xff0c;运用Java语言、JSP技术以及…

关于JVM和OS中的指令重排以及JIT优化

关于JVM和OS中的指令重排以及JIT优化 前言&#xff1a; 这东西应该很重要才对&#xff0c;可是大多数博客都是以讹传讹&#xff0c;全是错误&#xff0c;尤其是JVM会对字节码进行重排都出来了&#xff0c;明明自己测一测就出来的东西&#xff0c;写出来误人子弟… 研究了两天&…

VS2022远程调试Linux程序

一、 1、VS2022安装参考 VS Studio2022安装教程&#xff08;保姆级教程&#xff09;_visual studio 2022-CSDN博客 注意&#xff1a;勾选的时候&#xff0c;要勾选下方的选项&#xff0c;才能调试Linux环境下运行的程序&#xff01; 2、VS2022远程调试Linux程序测试 原文参…

WPF设计学习记录滴滴滴4

<Button x:Name"btn"Content"退出"Width" 100"Height"25"Click"btn_Click" IsDefault"True"/> <Button x:Name"btn" <!-- 控件标识&#xff1a;定义按钮的实例名称为"btn&…