upload-labs(writeup)

news2024/12/24 9:20:21

pass1

前端验证,使用bp抓包改后缀

pass2

验证MIME类型,使用bp抓包,更改Content-Type 即可

pass3

黑名单限制,可以上传 .php3 .php5 .pthml 等等后缀, 但是要在phpstydy配置文件中更改,(我使用2018版才行)

image-20221201175504093

pass4

由于我们使用的时 apache 中间件,于是我们可以上传 .htaccess 文件

将 上传的图片马解析为 php脚本执行

image-20221201181015779 image-20221201180238997

pass5

image-20221201180954107

这里的思路是没有进行循环验证,只验证一次

我们可以上传 muma.php. . 文件, trim()去除字符串两端空格,然后deldot()删除文件名末尾的小数点,但是遇到空格就停止了,文件名变为 muma.php. (空格) ,最后使用trim() 去掉末尾的空格, 后缀变为: .php.

由于windows会在文件命名的时候自动去除文件名后的小数点和空格,于是上传之后的文件名为: muma.php

image-20221201181532201

pass6

image-20221201181622552

对比之前的条件发现,少了大写转小写的函数,于是可以大小写绕过

image-20221201181823352

pass7

image-20221201181853675

少了trim()函数,直接在 .php 后加空格绕过,windows生成文件时会自动将文件名后缀后面的空格去除。

pass8

少了去除文件尾的小数点的函数,在 .php 后加小数点 .php. 绕过

pass9

少了去除字符串 ::$DATA 的函数

::$DATA 将在 .php 后面即可

php在window的时候如果文件名+"::$DATA“会把::$DATA 之 后 的 数 据 当 成 文 件 流 处 理 , 不 会 
检 测 后 缀 名 . 且 保 持 ” : : $DATA之后的数据当成文件流处理,不会检测后缀名.且保持”:: $DATA之后的
数据当成文件流处理,不会检测后缀名.且保持”::$DATA"之前的文件名

image-20221201183028824

pass10

和pass5一样

pass11

image-20221201183824683

发现会把黑名单中的后缀名替换为空,但是只进行一次,于是可以进行双写绕过

muma.pphphp => muma.php

image-20221201183857964

pass12

image-20221201190413126

第十二关我们看代码,可以得知是一个白名单,只允许上传'jpg','png','gif'格式的文件。但是上传路径是可以
控制的,可以使用%00进行截断。
%00只能用于php版本低于5.3的。这里我们需要把phpstudy切换一下版本,
把magic_quotes_gpc关闭

00截断的原理

00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即
0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符
号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。00截断通常用来绕过web软waf
的白名单限制。

于是,我们可以在save_path 后面加上 a.php%00 截断后面的png图片名,造成上传文件变为php文件

image-20221201190856987

访问 /upload/x.php:

image-20221201190952904

pass13

image-20221201191047010

这一题还是 %00 截断,但是这一题是post请求方式,所以需要将 %00进行urldecode 解码

image-20221201191410559

pass14

image-20221201191523736

这一题考察文件头内容判断,在文件内容第一行加上相应文件的头标识即可,然后配合文件包含漏洞,将对应图片中的php代码引入即可执行出相应脚本

GIF

image-20221201192219151 image-20221201192353294

JPG

使用DOS命令行制作图片马,或者直接在文件后面加上也是一样的效果

copy 1.jpg/b + shell.php/a muma.jpg
image-20221201194422975 image-20221201194140250

PNG

和jpg类似,与图片合成,制作图片马

image-20221201195231706

注意php版本问题,如果低版本php,使用文件包含漏洞访问图片马,可能会报错。

pass15

和pass14类似

image-20221201200043460
我们来看这个 getimagesize函数,这个函数的意思是:会对目标文件的16进制去进行一个读取,去读取头几个字
符串是不是符合图片的要求的

pass16

image-20221201195746480

与pass14类似,要把php_exif 模块打开

exif_imagetype() 读取一个图像的第一个字节并检查其签名。

本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像。

pass17

二次渲染

imagecreatefromjpeg()函数
二次渲染是由Gif文件或 URL 创建一个新图象。成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,上传图片马失败。
进行通关
按照原来的方法进行上传,我们可以发现还是可以上传的,但是配合包含漏洞却无法解析,这时我们把上传的图片复制下来用Notepad打开,发现我们原来写的php代码没有了,这就是二次渲染把我们里面的php代码删掉了。
我们把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,配合包含漏洞,就可以了。(GIF通关法)

png、jpg可以使用大佬写的脚本生成图片马

pass18

条件竞争

image-20221201201133334

从源码来看,服务器先是将上传的文件保存下来,然后将文件的后缀名同白名单对比,如果是jpg、png、gif中的一种,就将文件进行重命名。如果不符合的话,unlink()函数就会删除该文件。

这么看来如果我们还是上传一个图片马的话,网站依旧存在文件包含漏洞我们还是可以进行利用。但是如果没有文件包含漏洞的话,我们就只能上传一个php木马来解析运行了。

那还怎么搞?上传上去就被删除了,我还怎么去访问啊。

不慌不慌,要知道代码执行的过程是需要耗费时间的。如果我们能在上传的一句话被删除之前访问不就成了(这时由于文件正在访问,所以也就删除不了了)。这个也就叫做条件竞争上传绕过。

我们可以利用burp多线程发包,然后不断在浏览器访问我们的webshell,会有一瞬间的访问成功。

为了更好的演示效果,把一句话木马换一下改为:

<?php fputs(fopen('mm.php','w'),'<?php @eval($_POST["cmd"])?>');?>

把这个php文件通过burp一直不停的重放,然后再写python脚本去不停的访问我们上传的这个文件,总会有那么一瞬间是还没来得及删除就可以被访问到的,一旦访问到该文件就会在当前目录下生成一个mm.php的一句话。在正常的渗透测试中这也是个好办法。因为单纯的去访问带有phpinfo()的文件并没有什么效果。一旦删除了还是无法利用。但是这个办法生成的mm.php服务器是不会删除的,我们就可以通过蚁剑去链接了。

pass19

条件竞争

pass20

image-20221201202926594

解法一: 使用 %00截断

解法二:

move_uploaded_file()有这么一个特性,会忽略掉文件末尾的 /.

image-20221201203859303

image-20221201203935466

pass21

这一关是利用数组绕过验证

image-20221201204025118

image-20221201204424423

这一题先上传一个php文件,

修改Content-Type 绕过MIME 验证

然后会判断save_name是否为空,不为空,文件名就获得save_name 值

我们在图片中可以看到,save_name 我们设置成了一个数组,于是 $file 就是一个数组,绕过了explode()函数

然后使用end()函数, $ext 获得数组最后一个元素,即 jpg,绕过了后缀判断in_array()

然后, f i l e n a m e 就为: a a a . p h p / . 由于 c o u n t ( file_name 就为: aaa.php/. 由于count( filename就为:aaa.php/.由于count(file) 等于数组的长度,因为数组只要两个元素,所以长度为2,于是 f i l e [ c o u n t ( file[count( file[count(file) - 1] = f i l e [ 1 ] 。因为 file[1] 。因为 file[1]。因为file[1] 没有设置值,于是该值便为空,

则 $file_name = aaa.php/. 我们知道move_uploaded_file()有这么一个特性,会忽略掉文件末尾的 /.

所以上传文件名就变成了 aaa.php 妙啊

image-20221201205634412

explode(separator,string[,limit]) 函数,使用一个字符串分割另一个字符串,并返回由字符串组成的数组。
end(array)函数,输出数组中的当前元素和最后一个元素的值。
reset(array)函数,把数组的内部指针指向第一个元素,并返回这个元素的值
count(array)函数,计算数组中的单元数目,或对象中的属性个数

_file()有这么一个特性,会忽略掉文件末尾的 /.**

所以上传文件名就变成了 aaa.php 妙啊

[外链图片转存中…(img-1o1qAKcq-1671939579820)]

explode(separator,string[,limit]) 函数,使用一个字符串分割另一个字符串,并返回由字符串组成的数组。
end(array)函数,输出数组中的当前元素和最后一个元素的值。
reset(array)函数,把数组的内部指针指向第一个元素,并返回这个元素的值
count(array)函数,计算数组中的单元数目,或对象中的属性个数

https://blog.csdn.net/weixin_47598409/article/details/115050869

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

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

相关文章

网络编程 基于tcp/ip协议的C/S模型

1.socket编程的一些概念 socket作用&#xff1a;运行在计算机中的两个程序通过socket建立起一个通道&#xff0c;数据在通道中传输。socket提供了流(stream)&#xff0c;是基于TCP协议&#xff0c;是一个有序、可靠、双向字节流的通道&#xff0c;传输数据不会丢失、不会重复、…

C#中的String和StringBuilder

一&#xff1a;前言 String和StringBuilder都是引用类型 StringBuilder是可变的字符串&#xff0c;它不会创建当前字符串的新修改实例而是在现有字符串对象中进行修改 String是不可变字符串&#xff0c;一旦被初始化后就不能改变其内容&#xff0c;String值改变的过程其实是创…

如何自定义注解

在 Spring Boot 应用中&#xff0c;使用自定义注解时需要用到 AOP&#xff0c;因此引入 AOP 相关依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependenc…

Python办公自动化|批量生成请假条

大家好&#xff0c;我是毕加锁 本文就将基于一个真实的办公案例进行讲解如何提取Excel内容并创建Word&#xff0c;主要将涉及以下三个知识点 “ openpyxl 读取 Excel 文件 python-docx 写入 Word 文件 python-docx 各类样式的设计和调整 ”需求描述 你是公司的底层小虾米&…

2022年AIGC简单展望

2022 对于社会是不平凡的一年&#xff0c;而对于科技也同样是不平凡的一年。人们在社会中遭受着失意&#xff0c;却在科技中寻找希冀。对于一个命运共同体&#xff0c;它想着如何破除衰退&#xff0c;而同样对于一个活生生的个体或者家庭&#xff0c;他们也在摸索改变命运的机遇…

SpringBoot拦截器HandlerInterceptor

一、HandlerInterceptor是什么&#xff1f; Spring Boot 拦截器主要应用于登陆校验、权限验证、乱码解决&#xff0c;同样提供了拦截器功能。 二、使用方式 在项目中实现HandlerInterceptor接口开箱即用 三、HandlerInterceptor 中实现的方法 方法介绍preHandle(HttpServletRe…

Linux操作系统之进程间的通讯—管道

文章目录进程间通讯&#xff08;IPC机制&#xff09;有哪几种方式&#xff1f;1、管道有名管道无名管道2、信号量进程间通讯&#xff08;IPC机制&#xff09;有哪几种方式&#xff1f; 管道、信号量、共享内存、消息队列、套接字 1、管道 什么是管道&#xff1f; 有名管道…

JavaScript 入门基础 - 变量 / 数据类型(二)

JavaScript 入门基础 - 变量 / 数据类型&#xff08;二&#xff09; 文章目录JavaScript 入门基础 - 变量 / 数据类型&#xff08;二&#xff09;1.变量1.1 什么是变量1.2 变量在内存中的存储1.3 变量的使用1.4 变量语法扩展1.4.1 更新变量1.4.2 声明多个变量1.4.3 声明变量的特…

node.js+uni计算机毕设项目个性化服务系统小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

一文稿定 Appium 环境配置

Appium 是一个开源的、跨平台的测试框架&#xff0c;可以用来测试 Native App、混合应用、移动 Web 应用&#xff08;H5 应用&#xff09;等&#xff0c;也是当下互联网企业实现移动自动化测试的重要工具。Appium 坚持的测试理念&#xff1a; •无需用户对 App 进行任何修改或…

vue后台管理系统项目-vue-quill-editor实现富文本编辑器功能

富文本编辑器功能实现详细过程 目录 富文本编辑器功能实现详细过程 1.安装富文本插件 2.实现效果 3.实现详细过程 可直接使用 全局引入 局部引入 配置option 扩展需求 自定义配置文字大小 1.安装富文本插件 npm install vue-quill-editor --save //或者 yarn add vu…

AI城管自动识别摊贩占道经营出店经营行为

AI城管自动识别摊贩占道经营出店经营行为通过pythonyolov7对现场画面自动AI实时监测&#xff0c;当监测到流动商贩占道经营违规摆摊出店经营时时&#xff0c;立即告警。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得非常流行&#xff0c;主要是因…

论多窗口相互关联下window.open打开已在的窗口时只激活不刷新的实现方案

前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 来个关注吧&#xff0c;点个赞…

Springboot+Netty实现基于天翼物联网平台CTWing(AIOT)终端TCP协议(透传模式)-设备终端(南向设备)

电信的天翼物联网平台CTWing(AIOT)原先是我们俗称的aep&#xff0c;主要用于接入nb-iot设备&#xff0c;当然也可以接入其他的设备&#xff0c;在熟悉AIOT平台后&#xff0c;做后端的我有时候急需终端样品(智能门禁&#xff0c;支付识别终端&#xff0c;CPE终端&#xff0c;考勤…

使用 Swift/SwiftUI 的音频可视化

IOS 应用程序中的音频可视化是一项流行的功能,在实现聊天功能时可能需要它。将它添加到我最近的项目之一时,我个人遇到了一些问题。 你们中的一些人可能在开发包含聊天功能的应用程序时遇到过问题,其中某些消息可能包含音频。这些消息需要在应用程序内进行适当的音频可视化,…

【算法题解】3. 颠倒二进制位

文章目录题目解法一解题思路代码实现复杂度分析解法二解题思路代码实现复杂度分析解法三解题思路代码实现复杂度分析题目 颠倒给定的 32 位无符号整数的二进制位。来自&#xff1a;leetcode 解法一 解题思路 取 n 的最低位&#xff0c;赋值给 ans 的最低位&#xff08;ans 初…

mybatis 多对一查询的处理方式,1.按照查询嵌套处理(子查询),2、按照结果嵌套处理(连表查询)

多对一查询 1、实体类 Student实体类&#xff1a; public class Student { private int id; private String name; private Teacher teacher;//对象属性}Teacheer 实体类&#xff1a; public class Teacher { private int id; private String name;2、Mybatis配置文件mybatis…

FastDDS(4)安装步骤

eProsima Fast DDS for Linux的最新二进制安装版本可在eProssma网站找到。 eProsima Fast DDSSpecialized on high performance middleware. Check out our comparatives such as Apache Thrift vs Protocol Buffers vs Fast Buffers or ZMQ vs Fast RTPS.https://www.eprosim…

从一道经典题来弄懂Eventloop(搞不懂算我输)

前言 时间不知不觉来到了11月底&#xff0c;马上也要准备一下寒假的实习了。 最近打算把面试中的一些拦路虎给解决掉&#xff01;&#xff01; 先拿臭名昭著的Eventloop开刀~ 经典题 async function foo() {console.log(foo) } async function bar() {console.log(bar start…

RabbitMQ:基本消息模型

单生产单消费模型&#xff0c;即基本消息模型或简单消费模型&#xff0c;即完成基本的一对一消息转发。 RabbitMQ 单生产单消费模型主要有以下三个角色构成&#xff1a; 生产者&#xff08;producer/ publisher&#xff09;&#xff1a;一个发送消息的用户应用程序。消费者&…