【web靶场】之upload-labs专项训练(基于BUUCTF平台)

news2025/1/12 7:30:33

前言

该靶场,是通过平台BUUCTF在线评测中的靶场进行的,基于linux搭建的

当然若是想要该靶场,可以采用github上的醒目,点击后面文字即可访问c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场

或者本人分享在网盘中,可通过链接https://pan.quark.cn/s/fe695fdbcbfd下载其中的upload-labs

upload-labs使用

pass-01

打开靶场,让我们上传图片,任务是让上传一个webshell,因为靶场是PHP搭建,所以这里使用最简单的webshell,一句话木马

image-20240706192953310

直接上传shell.php测试,发现有提示

查看html的form表单,是否只有前端验证,发现提交给一个函数,说明是前端验证的

在前端中搜索有无这个函数,发现有这个函数,那么就可以把浏览器设置成不加载js资源,使得这个函数失效

刷新页面,再次上传

这里就已经上传到服务器中,可以使用第三方工具进行连接,如蚁🗡

可以查看文件等操作,到这里说明成功拿到网站的某个权限了

Pass-02

打开后直接上传shell.php测试,发现提示

查看是否有前端js的影响,发现虽然有函数的影响,但是在这里直接搜索,已经搜索不到,验证不在浏览器的前端了,在后端的验证,产生数据包,使用burpsuit或者yakit进行抓取

为什么上传不了呢,最后要上传的是脚本文件,也就是,以这里来说,上传的文件要是脚本文件才会被执行。如果是图片的话,数据包的形式是怎么样的,这里再抓取一个图片的数据包进行对比

对比发现filename与content-type不一样,文件名这个肯定不一样,主要是就是content-type了,这个可以上网查,文件类型的不同,这个处理也会不一样的。那么这里抓取包的时候,把content-type修改,会不会被识别成图片,然后上传呢。这里只对content-type进行验证

转发修改的数据包后,脚本上传成功

这里就已经成功

Pass-03

直接上传php文件

抓取数据包进行修改content-type的值

但是还是提示,不允许上传这几个脚本文件,说明设置了黑名单

想到他设置黑名单,但是有的脚本语言有扩展名,不只只有本来的一种形式,这里如php,有很多。但是这个需要服务器开启了对应的解析,不然这个也是没有作用,所以这里需要一个个试

apache服务器为例,需要把这个添加AddType application/x-httpd-php .php .phtml .phps .php5 .pht那么才会解析这加的几种文件类型

修改其中的一个扩展名,上传成功

并且,开链接后,也是以脚本文件去处理的,代码可执行

Pass04

这里用到.htaccess文件,这里因为发现基本上所有的脚本文件都被拉黑了,所以这个文件若没有,则可以上传这个文件,来让上传的图片作为脚本执行。

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过.htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

.htaccess文件(或者”分布式配置文件”)提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。

文件所在的目录及其所有子目录,若要启动配置文件,我们需要在服务器的主配置文件将 AllowOverride 设置为 All
AllowOverride All  #启动.htaccess文件的使用


在.htaccss文件添加下面的语句即可解析

<FilesMatch "创建的含有脚本文件的图片">
SetHandler application/x-httpd-php
</FilesMatch>
如:
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

或者添加,是把.jpg映射成脚本文件
AddType  application/x-httpd-php  .jpg

为什么确定是apache,然后使用.htaccess呢,因为在打开一个不存在的链接时,报出的错误

然后这里需要注意,apache中间件的解析后缀,是从右往左,若是碰到不能解析的或不知道的,会继续往左,直到碰到apache可解析的,这时文件就确定了apache解析类型

如:1.jpg.php.ccccc		apache从右解析,发现不知道ccccc是什么继续往左,碰到php,可以解析,于是最终apache解析的文件是1.jpg.php

这里有两种解法,不过这里先把脚本换成phpinfo(),这样不需要每次连接来确定是否解析了

1、修改后缀名

抓取数据包,把后缀名修改为apache不知道,这样,因为文件的特性,不能判断是php脚本文件,而且最终解析时,还会以php脚本处理

2、 利用.htaccess来把含有php语言的图片,能够作为脚本处理

创建带有脚本的图片,并创建.htaccess文件,并加入语句

<FilesMatch "phpinfo.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

或者
AddType  application/x-httpd-php  .jpg

上传.htaccess文件

提示403,无权访问,但是上传成功

再次上传图片,可以看到文件依然是jpg格式,但是以脚本解析了。

Pass05

上传phpinfo文件后,以之前去在后缀名加ccc,上传成功,但是打开链接发现,这次是把php去除了,也就是进行了文件名中的字符匹配。

不知道过滤的严谨性,先把php大小写,试试能不能绕过,发现可以

Pass06

空格绕过,在文件后缀名处,通过抓包加上空格,然后即可上传成功,不过因为上传是上传了,但是访问的时候没有,不知道什么原因

Pass07

通过抓包,在后缀名php后,加上.即可绕过,因为这种不是正则表达式的过滤,是完整的名称,所以这种特殊字符可以绕过

Pass08

这关其实是利用 windows系统一个命名特性,系统如果文件名+"::$DATA"会把之后的数据当成文件流处理,不会检测后缀名,且保持之前的文件名,他的目的就是不检查后缀名

上传文件名为:测试.php::$DATA系统会自动去掉末尾的变成"测试.php或者xxx.php"

所以这里注意是windows系统,我这里靶场是在linux,所以这个不行

Pass09

这关其实是代码的一个问题,看代码可以看出它只去掉一次空格和点,举个例:测试.php. . 最后代码执行完后变成 测试.php. 这个代码漏洞在之前的关卡大多少也是可以用到这个漏洞过关的,这个靶场本身就是学习用的所以还是每个关卡学习一个方法最好

Pass10

移除php等脚本后缀名称,如果这里他只进行了一次移除,那么就可以采用双写的方法绕过

Pass11

这关就可以用 %00截断来绕过它是地址上的截断,但注意是get请求和版本 PHP版本得小于5.3版本才能用这个%00截断,如果版本没问题没成功可能是编码的问题 例如: hanniu8.com/up/r.php%00cesho.gif 遇到 后会将 %00后面的去掉,变成: hanniu8.com/up/r.php

这里靶场问题,可能是php版本,无法进行

Pass12

与11一样,不过这里是在post里截断,条件与上面一样,php的版本问题

Pass13

首先要制造图片马

然后直接上传即可,但是是jpg格式,无法以脚本运行

但是给了一个文件包含漏洞的文件

点击后即可有php文件

利用这个文件,来使图片马生效

使用软件连接webshell

Pass14

制造图片马,这种制造是以真实的图片结合起来的,所以可以通过大部分的文件头检测

和13一样,直接上传,然后利用文件包含漏洞即可

Pass15

与上面一样,先生成

Pass16

首先上传图片,经测试,只有gif文件可以上传成功,从代码审计的话,也能看出来。

然后制造gif的图片马,直接上传,但是上传后的图片,却不能从文件包含漏洞那里连接第三方软件了,猜测图片二次渲染时,可能把代码去掉了,把上传的图片下载,然后与原始图片进行十六进制的比较,在两个图片同样的地方,插入脚本语言,进行测试

相同的地方,插入<?php phpinfo();?>,重新上传,然后就可以看到

Pass17

move_uploaded_file()函数将上传文件临时保存,再进行判断,如果不在白名单里则unlink()删除,在的话就rename()重命名,所以这里存在条件竞争。由此也就产生了漏洞,会有一个短暂的时间将我们上传的webshell存储在目录下,但是这个时间相当相当短暂,以至于,你打开上传目录,点击上传文件,你连影子都看不到就已经没了,所以这个时候我们先抓包,然后发送到intruder模块。进行无限制的请求,总会有一个可以。

一个intruder模块中的请求用于发送php文件到服务器中,另一个intruder模块用于请求上传之后的php文件地址

    if(move_uploaded_file($temp_file, $upload_file)){
        if(in_array($file_ext,$ext_arr)){
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);
        }
    }else{
        $msg = '上传出错!';
    }
}

Pass18

基本上和17一样,都是条件竞争

是利用Apache的解析漏洞,不管最后后缀为什么,只要是.php.*结尾,就会被Apache服务器解析成php文件 提交类似webshell.php.7z的文件,配合条件竞争上传,同17

Pass19

可以使用%00截断,不过和前面一样,php的版本,因环境,我这里不行

move_uploaded_file()函数会忽略掉文件末尾的/. 所以上传文件名为webshell.php/.即可绕过

Apache文件解析漏洞同样可以利用,参考Pass-19

.空格同样可以绕过,参考Pass-05

pass20

数组绕过,参考链接Upload-labs Pass-20 数组绕过_uploadlabs baynk-CSDN博客

保存名称可自己设定,但是一定要与下面一致

原数据包

修改后的,可以上传成功的

结果,这里的链接是后来的图,正常上面成功的话,就是/upload/20.php.

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

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

相关文章

美摄科技为企业打造专属PC端视频编辑私有化部署方案

美摄科技&#xff0c;作为视频编辑技术的先行者&#xff0c;凭借其在多媒体处理领域的深厚积累&#xff0c;为企业量身打造了PC端视频编辑私有化部署解决方案&#xff0c;旨在帮助企业构建高效、安全、定制化的视频创作平台&#xff0c;赋能企业内容创新&#xff0c;提升品牌影…

Vue3(elementPlus) el-table替换/隐藏行箭头,点击整行展开

element文档链接&#xff1a; https://element-plus.org/zh-CN/component/form.html 一、el-table表格行展开关闭箭头替换成加减号 注&#xff1a;Vue3在样式中修改箭头图标无效&#xff0c;可能我设置不对&#xff0c;欢迎各位来交流指导 转变思路&#xff1a;隐藏箭头&…

【C++入门】详解(中)

目录 &#x1f495;1.函数的重载 &#x1f495;2.引用的定义 &#x1f495;3.引用的一些常见问题 &#x1f495;4.引用——权限的放大/缩小/平移 &#x1f495;5. 不存在的空引用 &#x1f495;6.引用作为函数参数的速度之快&#xff08;代码体现&#xff09; &#x1f4…

【题解】—— LeetCode一周小结53

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结52 30.二叉树中的链表 题目链接&#xff1a;1367. 二叉树中的链…

Vue方法、计算机属性及侦听器

数组变化侦测 假设我们写了一个数组&#xff0c;现在想让该数组中新增一条数据,那么如何去实现呢&#xff1f; <template><h3>数组变化侦听</h3><button click"addListHandler">添加数据</button><ul><li v-for"(item…

TIOBE编程语言排行靠前的编程语言的吉祥物

Python的吉祥物&#xff1a;小蟒蛇 Python语言的吉祥物是一只名叫"Pythonidae"&#xff08;或简称"Py"&#xff09;的小蟒蛇。这个吉祥物由Tobias Kohn设计于2005年&#xff0c;它的形象借鉴了真实的蟒蛇&#xff0c;但加入了一些可爱和友善的特点。小蟒蛇…

Linux (CentOS) 安装 Docker 和 Docker Compose

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

Unity热更新 之 Addressables(2) 本地/远端打包 流程测试

基础篇&#xff1a;Unity热更新 之 Addressables(1) 资源基础加载-CSDN博客 基础方法来源于唐老狮,我也是初学热更这一块&#xff0c;所有不保证步骤完全正确&#xff0c;如有不足还请斧正 目录 0.前提 1.本地打包 1.1.资源放入包 1.2.简化路径名称给出标签(如有需要的话) …

Openstack持久存储-Swift,Cinder,Manila三者之间的区别

总结不易&#xff0c;给个三连吧&#xff01;&#xff01;&#xff01; 补充&#xff1a; 文件共享存储服务Manila 在OpenStack生态系统中&#xff0c;Cinder和Manila分别提供了两种不同类型的存储服务&#xff0c;类似于传统的SAN&#xff08;存储区域网络&#xff09;和NAS&…

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法&#xff0c;以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…

JavaEE之线程池

前面我们了解了多个任务可以通过创建多个线程去处理&#xff0c;达到节约时间的效果&#xff0c;但是每一次的线程创建和销毁也是会消耗计算机资源的&#xff0c;那么我们是否可以将线程进阶一下&#xff0c;让消耗计算机的资源尽可能缩小呢&#xff1f;线程池可以达到此效果&a…

J-LangChain - 复杂智能链流式执行

系列文章索引 J-LangChain 入门 介绍 j-langchain是一个Java版的LangChain开发框架&#xff0c;具有灵活编排和流式执行能力&#xff0c;旨在简化和加速各类大模型应用在Java平台的落地开发。它提供了一组实用的工具和类&#xff0c;使得开发人员能够更轻松地构建类似于LangC…

《HeadFirst设计模式》笔记(上)

设计模式的目录&#xff1a; 1 设计模式介绍 要不断去学习如何利用其它开发人员的智慧与经验。学习前人的正统思想。 我们认为《Head First》的读者是一位学习者。 一些Head First的学习原则&#xff1a; 使其可视化将文字放在相关图形内部或附近&#xff0c;而不是放在底部…

springboot整合h2

在 Spring Boot 中整合 H2 数据库非常简单。H2 是一个轻量级的嵌入式数据库&#xff0c;非常适合开发和测试环境。以下是整合 H2 数据库的步骤&#xff1a; 1. 添加依赖 首先&#xff0c;在你的 pom.xml 文件中添加 H2 数据库的依赖&#xff1a; <dependency><grou…

安装rocketmq dashboard

1、访问如下地址&#xff1a; GitHub - apache/rocketmq-dashboard: The state-of-the-art Dashboard of Apache RoccketMQ provides excellent monitoring capability. Various graphs and statistics of events, performance and system information of clients and applica…

mysql中创建计算字段

目录 1、计算字段 2、拼接字段 3、去除空格和使用别名 &#xff08;1&#xff09;去除空格 &#xff08;2&#xff09;使用别名&#xff1a;AS 4、执行算术计算 5、小结 1、计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式&#xff0c;下面举几个例子。 …

【批量拆分PDF】批量按页码范围拆分PDF并按页码重命名:技术难题与总结

按照页码范围拆分PDF项目实战参考&#xff1a; 【批量个性化拆分PDF】批量拆分PDF只取PDF的首页&#xff0c;批量按照文件大小来拆分PDF&#xff0c;PDF按照目录页码范围批量计算拆分分割文件PDF个性化拆分&#xff08;单个拆分&#xff0c;取首页拆分&#xff0c;按页码计算拆…

MySQL表的增删改查(基础)-上篇

目录 CRUD 新增 查询 (1)全列查询 (2)指定列查询 (3)查询时指定表达式 (4)别名 (5)去重查询 (6)排序查询 (7)条件查询 (8)分页查询 CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写 新增 也可插入中文字符串 查询 (1)全列查…

【论文速读】| 利用大语言模型在灰盒模糊测试中生成初始种子

基本信息 论文标题: Harnessing Large Language Models for Seed Generation in Greyb0x Fuzzing 作者: Wenxuan Shi, Yunhang Zhang, Xinyu Xing, Jun Xu 作者单位: Northwestern University, University of Utah 关键词: Greyb0x fuzzing, Large Language Models, Seed g…

Linux:操作系统简介

前言&#xff1a; 在本片文章&#xff0c;小编将带大家理解冯诺依曼体系以及简单理解操作喜欢&#xff0c;并且本篇文章将围绕什么以及为什么两个话题进行展开说明。 冯诺依曼体系&#xff1a; 是什么&#xff1a; 冯诺依曼体系&#xff08;Von Neumann architecture&#xff…