文件上传靶场upload-labs通关

文章目录

  • 前言
  • Pass-01(JavaScript绕过)
    • Step1、分析源码
    • Step2、修改webshell文件后缀名
    • Step3、修改报文重新发送
    • Step4、使用webshell程序测试是否能连接
  • Pass-02(MIME-Type绕过)
    • Step1、分析源码
    • Step2、burp抓包,修改数据包
    • Step3、使用webshell程序测试是否能连接
  • Pass-03(黑名单绕过)
    • Step1、分析源码
    • Step2、burp抓包,修改数据包
  • Pass-04(黑名单之.htaccess绕过)
    • Step1、分析源码
    • Step2、抓包,重发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-05(黑名单之大小写绕过)
    • Step1、分析源码
    • Step2、抓包,重发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-06(黑名单之空格绕过)
    • Step1、分析源码
    • Step2、抓包,重发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-07(黑名单之.绕过)
    • Step1、分析源码
    • Step2、抓包,重发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-08(黑名单之::$DATA绕过)
    • Step1、分析源码
    • Step2、抓包,重发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-09(黑名单之点-空格-点绕过)
    • Step1、分析源码
    • Step2、抓包,重发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-10(黑名单之双写后缀绕过)
    • Step1、分析源码
    • Step2、抓包,重发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-11(白名单之%00截断 GET方法绕过)
    • Step1、分析源码
    • Step2、抓包,重发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-12(白名单之%00截断 POST方法绕过)
    • Step1、分析源码
    • Step2、抓包,重发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-13(白名单之文件包含漏洞图片马绕过)
    • Step1、分析源码
    • Step2、制作图片马
    • Step3、上传图片马
    • Step4、使用webshell程序测试是否能连接
  • Pass-14(白名单之文件包含漏洞getimagesize()检测绕过)
    • Step1、分析源码
    • Step2、制作图片马
    • Step3、上传图片马
    • Step4、使用webshell程序测试是否能连接
  • Pass-15(白名单之文件包含漏洞exif_imagetype()检测绕过)
    • Step1、分析源码
    • Step2、其他步骤跟Pass-14、Pass-15差不多
  • Pass-16(白名单之文件包含漏洞突破二次渲染)
    • Step1、分析源码
    • Step2、制作图片马
    • Step3、上传图片马
    • Step4、找到没有被修改的地方,修改被二次渲染的图片
    • Step5、再次上传修改后的图片马
    • Step6、使用webshell程序测试是否能连接
  • Pass-17(条件竞争)
    • Step1、分析源码
    • Step2、编写适合条件竞争的PHP文件
    • Step3、抓包,配置上传的爆破
    • Step4、抓包,配置访问文件的爆破
    • Step5、开始攻击
    • Step6、使用webshell程序测试是否能连接
  • Pass-18(条件竞争+文件包含漏洞)
    • Step1、分析源码
    • Step2、制作图片马
    • Step3、上传图片马,抓包查看
    • Step4、配置图片马上传的爆破
    • Step5、使用文件包含漏洞来访问图片,然后抓包
    • Step6、上传和访问同时攻击
    • Step7、使用webshell程序测试是否能连接
  • Pass-19(move_uploaded_file函数绕过)
    • Step1、分析源码
    • Step2、抓包,重新发送请求
    • Step3、使用webshell程序测试是否能连接
  • Pass-20(文件名数组绕过)
    • Step1、分析源码
    • Step2、抓包,修改数据包重发送
    • Step3、使用webshell程序测试是否能连接


前言

upload-labs是一个专门用来练习文件上传的靶场
在这里插入图片描述
一共20关,现在,我们开始通关吧。


Pass-01(JavaScript绕过)

Step1、分析源码

在这里插入图片描述
这里使用了前端JavaScript来进行过滤,并且只允许上传jpg、png、gif类型的文件。

Step2、修改webshell文件后缀名

把生成的webshell文件1.php改名成2.jpg,上传,然后查看burp数据包
在这里插入图片描述

把数据包发送到Repeater模块
在这里插入图片描述
在这里插入图片描述

Step3、修改报文重新发送

在这里插入图片描述

文件存放的路径
在这里插入图片描述

Step4、使用webshell程序测试是否能连接

在这里插入图片描述
第一关通关。


Pass-02(MIME-Type绕过)

Step1、分析源码

在这里插入图片描述
这里是对发送的数据请求包进行了检测,只有符合要求的Content Type字段才能上传成功,也就对MIME-Type类型进行检测。

Step2、burp抓包,修改数据包

直接上传webshell文件,然后抓包
在这里插入图片描述

修改数据包Content Type字段类型
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
连接成功,第二关通关


Pass-03(黑名单绕过)

Step1、分析源码

在这里插入图片描述
看源码,这里使用了黑名单绕过,禁止了’.asp’,‘.aspx’,‘.php’,'.jsp’等后缀名命名的文件上传,这就使用不在这个黑名单上面的后缀名吧。

Step2、burp抓包,修改数据包

这里就上传一句话木马
在这里插入图片描述
好了,文件上传成功了,第三关通关


Pass-04(黑名单之.htaccess绕过)

注意:这里对PHP版本有要求,只有不带nts的PHP版本才有效。

Step1、分析源码

在这里插入图片描述
这一关几乎把所有我们能想到的文件类型都禁止掉了,这时后就只能上传一些乱七八糟的格式的文件。

Step2、抓包,重发送请求

上传 .htaccess 文件,内容为:SetHandler application/x-httpd-php
在这里插入图片描述

把webshell文件随便修改成任意后缀名的文件
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
好了,连接成功,第四关通关


Pass-05(黑名单之大小写绕过)

注意:这里对PHP版本有要求,只有不带nts的PHP版本才有效。

Step1、分析源码

在这里插入图片描述
这里黑名单加入了 .htaccess ,也就是说不允许上传.htaccess文件了,但源码发现,少了一个转换为小写的函数,也即是说可以使用大小写绕过功能。

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
这里第5关通关


Pass-06(黑名单之空格绕过)

Step1、分析源码

在这里插入图片描述
这里没有去除文件中的空格,这个可以利用
这时候就需要普及一个知识:Windows下‘xx.jpg ’和‘xx.jpg.’两种文件是不被允许存在的,要是这样命名文件,Windows系统会默认删除空格或者‘.

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第6关通关


Pass-07(黑名单之.绕过)

Step1、分析源码

在这里插入图片描述
这里没有去除文件末尾的‘.’,这个可以利用。
这时候就需要普及一个知识:Windows下‘xx.jpg ’和‘xx.jpg.’两种文件是不被允许存在的,要是这样命名文件,Windows系统会默认删除空格或者‘.

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第7关通关


Pass-08(黑名单之::$DATA绕过)

Step1、分析源码

在这里插入图片描述
这里没有去除::$DATA样式的字符串。
NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:$ DATA

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第8关通关


Pass-09(黑名单之点-空格-点绕过)

注意:该方法只对7.1以下的PHP版本有用。

Step1、分析源码

在这里插入图片描述
这里先过滤了一次末尾的‘.’后过滤了一次空格。这就能生成一种思路,使用:‘点-空格-点’的方式来进行绕过。

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第9关通关


Pass-10(黑名单之双写后缀绕过)

Step1、分析源码

在这里插入图片描述
这个代码的意思就是把带有黑名单中的后缀替换为空。
这时我们考虑双写绕过。

Step2、抓包,重发送请求

.php改成 .pphphp,它就会删掉中间的php,最后保留 .php
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第10关通关


Pass-11(白名单之%00截断 GET方法绕过)

注意:这个东西已经是旧时代的产物的,所以有使用条件:
1. php版本小于5.3.4
2. php的magic_quotes_gpc为OFF状态

Step1、分析源码

在这里插入图片描述
这里设置了白名单。
save_path是一个可控的变量,后面还有一个后缀名需要绕过,这个时候需要使用%00截断。

Step2、抓包,重发送请求

修改save_path部分,使用%00截断,然后下面文件名修改成其他类型的后缀名。
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第11关通关


Pass-12(白名单之%00截断 POST方法绕过)

注意:这个东西已经是旧时代的产物的,所以有使用条件:
1. php版本小于5.3.4
2. php的magic_quotes_gpc为OFF状态

Step1、分析源码

在这里插入图片描述
在POST请求中,%00不会被自动解码,需要在16进制中进行修改00

Step2、抓包,重发送请求

在这里插入图片描述

进入16进制编码页面,把上面输入的空格16进制编码20修改成00
在这里插入图片描述

上传成功
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第12关通关


Pass-13(白名单之文件包含漏洞图片马绕过)

Step1、分析源码

在这里插入图片描述
这里只查看图片编码前2个字节

在这里插入图片描述
可以使用文件包含漏洞。

Step2、制作图片马

使用DOS命令:
copy hua.jpg /b + 2.php /a 123.jpg
这里hua.jpg是正常图片,2.php是包含webshell的文件,123.jpg是生成的图片马。
在这里插入图片描述

使用记事本打卡查看
在这里插入图片描述

Step3、上传图片马

在这里插入图片描述

右键在新标签打开图片可以查看图片的路径,可以看到图片是改名字了。
在这里插入图片描述

Step4、使用webshell程序测试是否能连接

测试路径是:http://192.168.1.107/upload-labs-master/include.php?file=upload/3520230628175732.jpg
在这里插入图片描述
第13关通关


Pass-14(白名单之文件包含漏洞getimagesize()检测绕过)

Step1、分析源码

在这里插入图片描述
getimagesize()函数将测定任何GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM或WBMP图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通HTML文件中标记中的 height/width 文本字符串。

Step2、制作图片马

这里就直接使用Pass-13的图片马了。

Step3、上传图片马

在这里插入图片描述
这里直接把图片的后缀名由JPG改成JPEG了。

Step4、使用webshell程序测试是否能连接

在这里插入图片描述
第14关通关。


Pass-15(白名单之文件包含漏洞exif_imagetype()检测绕过)

Step1、分析源码

在这里插入图片描述
exif_imagetype是判断一个图像的类型的进程。它会读取一个图像的第一个字节并检查其签名。

在这里插入图片描述
注意该实验需要开启php_exif模块

Step2、其他步骤跟Pass-14、Pass-15差不多


Pass-16(白名单之文件包含漏洞突破二次渲染)

注意:这里推荐使用gif文件,经测试jpg和png文件会经常被由头渲到尾,不太好用。

Step1、分析源码

在这里插入图片描述
这关会对上传的图片进行二次渲染

Step2、制作图片马

在这里插入图片描述

Step3、上传图片马

在这里插入图片描述
上传的路径是这里。

下载上传后的图片
在这里插入图片描述
在这里插入图片描述
对比两张图片很明显,里面的一句话webshell在二次渲染时被覆盖了,只有这一部分没有被二次渲染

Step4、找到没有被修改的地方,修改被二次渲染的图片

在这里插入图片描述
这里没有被二次渲染

把代码复制下来对比一下:
在这里插入图片描述
在这里插入图片描述
覆盖并修改这里

生成新的gif图片,图片略有失真了,不过不要紧
在这里插入图片描述

Step5、再次上传修改后的图片马

在这里插入图片描述

把图片下载下来,看看新图片木马里面的木马有没有被二次渲染
在这里插入图片描述
很好,这次没有被二次渲染

Step6、使用webshell程序测试是否能连接

在这里插入图片描述
第16关通关


Pass-17(条件竞争)

Step1、分析源码

在这里插入图片描述
这种情况,明显符合使用条件竞争的方式绕过

Step2、编写适合条件竞争的PHP文件

命名为777.php,内容为:
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["a"]); ?>'); ?>
现在要上传该PHP文件,并且执行它,让它生成一个名为shell.php的一句话webshell。

Step3、抓包,配置上传的爆破

上传一个777.php文件,抓包,发送到攻击模块
在这里插入图片描述

Clear所有的标记,然后设置payload
在这里插入图片描述
在这里插入图片描述
下方的Continue indefinitely也就是无限重放的意思。

Step4、抓包,配置访问文件的爆破

上传一个正常的图片,抓包
在这里插入图片描述
找到上传的路径,然后去访问

访问刚才上传的gif图片,抓包,发送到攻击模块
在这里插入图片描述

修改访问目标。配置payload
在这里插入图片描述
在这里插入图片描述

Step5、开始攻击

在这里插入图片描述
在这里插入图片描述
上面两个操作尽量达到同时攻击

在这里插入图片描述
好了,看到这个说明访问成功了!

Step6、使用webshell程序测试是否能连接

在这里插入图片描述
第17关通关


Pass-18(条件竞争+文件包含漏洞)

Step1、分析源码

在这里插入图片描述
在这里插入图片描述
从源码来看的话,服务器先是将文件后缀跟白名单做了对比,然后检查了文件大小以及文件是否已经存在。文件上传之后又对其进行了重命名。

看来的话,php是不能上传了,只能上传图片马了,而且需要在图片马没有被重命名之前访问它。要让图片马能够执行还要配合其他漏洞,比如文件包含,apache解析漏洞等。

Step2、制作图片马

这里的图片马使用Pass-18的,把他嵌入到gif文件中,并命名为777.gif
在这里插入图片描述

Step3、上传图片马,抓包查看

在这里插入图片描述
这里注意,上传的图片马被改名字后就直接保存到根目录,也就说假如执行了图片马,生成的webshell文件也是在根目录。

Step4、配置图片马上传的爆破

这里跟17关一样操作
在这里插入图片描述
在这里插入图片描述

Step5、使用文件包含漏洞来访问图片,然后抓包

先尝试是否能使用文件包含漏洞
在这里插入图片描述
发现能使用文件包含漏洞,就抓这个包

修改访问的文件
在这里插入图片描述
在这里插入图片描述

Step6、上传和访问同时攻击

跟第17关一样,同时攻击。

Step7、使用webshell程序测试是否能连接

这里得注意了,生成得webshell文件不是在upload目录,而是在跟目录的。
在这里插入图片描述
在这里插入图片描述
上面这两种访问方式都可以。第18关通关


Pass-19(move_uploaded_file函数绕过)

在这里插入图片描述
这关有点不一样。

Step1、分析源码

在这里插入图片描述
move_uploaded_file()这样一个函数,它有一个特性,会忽略到文件末尾的/. 及后面的内容
并且 move_uploaded_file() 函数中的 img_path 是由post参数 save_name 控制的,这就可以在 save_name 的参数上面改动。

Step2、抓包,重新发送请求

随机上传一个有webshell的php文件
在这里插入图片描述
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第19关通关


Pass-20(文件名数组绕过)

Step1、分析源码

在这里插入图片描述
这里先使用三元运算符判断 save_name 的值是否为空,如果为空,$file的值就是 upload_file 数组下的 name 的值,不为空就是 save_name 的值。

然后就判断$file是不是数组,如果$file不是数组的话,就会将$file以"." 分割,打散成数组。

同时,这里也存在 move_uploaded_file 函数,也就是说也有忽略到文件末尾的/. 后面内容的性质。

Step2、抓包,修改数据包重发送

构造数组:
save_name[0]=“2.php/”
save_name[1]为空
save_name[2]=“jpg”

可以简单分析得到,这样构造的数据包也最终会拼接成的路径是:2.php/. .jpg
由于有 move_uploaded_file() 这样一个函数,它有一个特性,会忽略到文件末尾的/. 及后面的内容,所以最终上传的会是2.php
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第20关通关。


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

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

相关文章

区块链中的共识机制以及共识算法

目录 什么是共识 什么是共识机制 共识机制类型 1、基于工作证明&#xff08;Proof of Work PoW&#xff09; PoW的特点 PoW是如何工作的&#xff1f; 挖矿 挖矿中的能源和时间消耗 挖矿奖励 比特币的PoW系统 工作证明的挑战 2、基于权益证明&#xff08;Proof of St…

Spring Boot 中的 Spring Cloud Feign

Spring Boot 中的 Spring Cloud Feign Spring Boot 是一个非常流行的 Java Web 开发框架&#xff0c;它提供了很多工具和组件来简化 Web 应用程序的开发。其中&#xff0c;Spring Cloud Feign 是 Spring Boot 中的一个非常重要的组件&#xff0c;它可以帮助我们实现声明式的 R…

tomcat多台应该怎么能设置

一个tomcat一般能处理5000-1000的并发量但是还是远远不够我们可以设置多台来满足我们的要求 首先进入tomcat目录 配置tomcat环境变量 vim /etc/profile.d/tomcat.sh 然后刷新 source /etc/profile.d/tomcat.sh 修改tomcat1里面的配置文件 然后进入tomcat1中的启动bin程序中…

Spring Cloud - HTTP 客户端 Feign 、自定义配置、优化、最佳实践

目录 一、Feign 是什么&#xff0c;有什么用呢&#xff1f; 二、Feign 客户端的使用 2.1、远程调用 1.引入依赖 2.在order-service&#xff08;发起远程调用的微服务&#xff09;的启动类添加注解开启Feign的功能 3.编写 Feign 客户端 4.通过 Feign 客户端发起远程调用 …

eNSP-静态路由表的配置

eNSP-静态路由表的配置 文章目录 eNSP-静态路由表的配置一、拓扑结构二、关键语句三、完整代码四、测试验证 一、拓扑结构 二、关键语句 ip route-static x.x.x.x y z.z.z.z 语法&#xff1a;目标网段 掩码 下一跳 例如 PC1所在网段访问PC2所在网段 在AR1中输入 ip route-st…

新加坡 PBM 是可编程数字货币的重要创新

一周以前我们在卢旺达开会的时候&#xff0c;新加坡 MAS 在现场发布了 Purpose Bound Money &#xff08;PBM&#xff09; 的技术白皮书。行业媒体发了几条新闻&#xff0c;然后就放过去了。实际上 PBM 代表着货币当局对于数字货币编程问题迄今为止最深度的思考&#xff0c;其白…

分布式软件架构——客户端缓存

浏览器的客户端缓存 当万维网刚刚出现的时候&#xff0c;浏览器的缓存机制差不多就已经存在了。在 HTTP 协议设计之初&#xff0c;人们便确定了服务端与客户端之间“无状态”&#xff08;Stateless&#xff09;的交互原则&#xff0c;即要求客户端的每次请求是独立的&#xff…

LeetCode 打卡day48--打家劫舍I, II, III

一个人的朝圣 — LeetCode打卡第48天 知识总结 Leetcode 198. 打家劫舍题目说明代码说明 Leetcode 213. 打家劫舍 II题目说明代码说明 Leetcode 337. 打家劫舍 III题目说明代码说明 知识总结 今天全是打家劫舍系列的题目, 还挺有意思的 Leetcode 198. 打家劫舍 题目链接 题目…

【C++初阶(二)】缺省参数以及函数重载

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C初阶之路⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习排序知识   &#x1f51d;&#x1f51d; 缺省参数&#xff06;函数重载 1. 前言2. 缺…

python学习——函数

一、函数的定义 函数就是执行特定任务和完成特定功能的一段代码。使用函数可以对代码进行复用&#xff0c;提高代码的可维护性和可读性&#xff0c;使得程序便于调试。 二、函数的创建 创建格式 #创建和格式 def 函数名&#xff08;[参数]&#xff09;:函数体[return xxx]举例…

MySQL:库的操作和表的操作(内含MySQL数据类型讲解)

进入数据库的数据目录 cd var/lib/mysql 库的操作 创建数据库 创建数据库的本质是创建目录。 创建数据库时有两个编码集&#xff1a;1.数据库编码集&#xff08;存储时使用&#xff09;2.进行字段比对读取时使用的编码方式&#xff09; 语法&#xff1a; CREATE DATABASE …

7、Redis复制(replica)

Redis复制(replica) 是什么&#xff1f; 就是主从复制&#xff0c;master以写为主&#xff0c;Slave以读为主。当master数据变化的时候&#xff0c;自动将新的数据异步同步到其它slave数据库 读写分离 容灾恢复 数据备份 水平扩容支撑高并发 案例演示 架构说明 一个Master两个…