第十一关

strrpos() 函数查找字符串在另一字符串中最后一次出现的位置

substr() 函数返回字符串的一部分

文件保存的方式是上传路径+随机时间+截取的文件后缀

其中上传路径可控,可以利用这一点

绕过方法

利用00截断进行绕过,即move_uploaded_file函数的底层实现类似于C语言,遇到0x00会截断

截断条件:
1、php版本小于5.3.4
2、php.ini的magic_quotes_gpc为OFF状态

move_uploaded_file函数遇到0x00(16进制)就会认为已经结束

第十二关

和上一个关一样不过路径上传方式由GET变成POST

绕过方法

00截断 post方式中需要修改成二进制的00而不是直接在请求数据中修改00

#在二进制中为23,为了好找,下一步在hex将23改成00

修改成00后会在数据包显示像口这样的字符

第十三关

读取上传文件中的两个字节

将读取的内容解包(unpack() 函数从二进制字符串对数据进行解包返回数组一个字节为一个值)

返回解包后的整数值(intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值)

绕过方法

我们在一句话木马的开头添加两个11也就是二进制的3131,将HEX编码 3131 改为 FFD8 点Go后成功上传JPG

上传了马后缀为jpg想要利用需要配合另一种漏洞文件包含,靶场专门有一个文件让我们测试文件内容为

绕过方法二

利用图片马,将一张正常的图片jpg,和一句话php合成一张新的jpg文件(window下 cmd , copy 1.jpg /b + 1.php /a  3.php)

合成后使用编辑工具打开图片内容包含一句话

第十四关

getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组

索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM

stripos — 查找字符串首次出现的位置

绕过方法

与上一关一样使用图片马

第十五关

exif_imagetype() — 判断一个图像的类型

返回值:
图像类型常量 值     常量
1     IMAGETYPE_GIF
2     IMAGETYPE_JPEG
3     IMAGETYPE_PNG
4     IMAGETYPE_SWF
5     IMAGETYPE_PSD
6     IMAGETYPE_BMP
7     IMAGETYPE_TIFF_II(Intel 字节顺序)
8     IMAGETYPE_TIFF_MM(Motorola 字节顺序)
9     IMAGETYPE_JPC
10     IMAGETYPE_JP2
11     IMAGETYPE_JPX
12     IMAGETYPE_JB2
13     IMAGETYPE_SWC
14     IMAGETYPE_IFF
15     IMAGETYPE_WBMP
16     IMAGETYPE_XBM

绕过方法

本关一样使用图片马

第十六关

图片经过渲染肯定与原来的照片不一样了

绕过方法

最简单的GIF图片

合成图片马上传,在把上传后的图片保存下来会发现一句话不见了,把图片马和下载下来的图片进行对比找到没有渲染的部分直接将一句话写进去

1.gif是我一开始上传图片马对比上传后的图片找出来一段没有经过修改的,我把其中一段空白修改成一句话代码,注意图片会失真

左边.gif是我上传修改后的1.gif保存的可以看到一句话完整的保存了下来

jpg和png都制作失败了,以后有时间再去研究,好像说图片内容格式不一样,不可以直接这样修改,都是用到国外牛人的脚本添加

第十七关

通过move_uploaded_file保存文件在判断是否后缀是否是图片,如果是则重命名保存,如果不是删除

这里存在着一个漏洞,叫条件竞争

当我发送大量的包时,文件就会先进行保存,而判断可能会存在一定的延迟

此时上传一个php文件里面代码在创建一个包含一句话的php这样就算把上传的文件删除也会存在一个木马文件

绕过方法

上传一个php文件里面代码进行创建一个新的文件

用burp捉包,选择爆破那个模块原包发送5000次,线程50

访问上传的文件

同样再发5000个请求包去访问未删除前的地址,一但成功则会生成一个shell文件

当请求页面返回200停止,此时由于我们代码理有生成shell文件,所以直接访问

第十八关

对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以不断利用burp发送上传图片马的数据包,由于条件竞争,程序会出现来不及rename的问题,从而上传成功

绕过方法

使用上一关的木马文件,白名单中允许后缀为7z的文件上传

我们可以构造1.php.7z文件,在Apache中允许多后缀,并且从右向左解析

当我们访问1.php.7z解析成php文件,根据文件代码生成shell.php

第十九关

文件名可控,

pathinfo() 返回一个关联数组包含有 path 的信息。

包括以下的数组元素:

  • [dirname]
  • [basename]
  • [extension]

绕过方法

使用点加空格 1.php.  获取到的后缀为点空格  在window中点空格默认会去除所以剩下1.php

第二十关

先检查文件类型,后检查是否上传了文件名没有则为文件的名字,判断是否为数组,若不是则以点分割返回一个数组,取数组最后一位数为后缀,文件保存为reset输出数组第一个数,和最后一位数保存

绕过方法

php修改后缀jpg上传捉包

文件类型已经为image/jpeg

修改上传路径为一个数组,当获取文件后缀时为jpg,合成文件名为数组第一个,和最后一个,当我们修改jpg为数组的2时,1此时是空的数组一共有三位数,但是实际只有两位,所有获取到的值为空

此时上传后的文件为1.php.

文件上传之靶场upload-labs (11-20)的更多相关文章

  1. 文件上传漏洞靶场分析 UPLOAD_LABS

    文件上传漏洞靶场(作者前言) 文件上传漏洞 产生原理 PASS 1) function checkFile() { var file = document.getElementsByName('upl ...

  2. jQuery文件上传插件jQuery Upload File 有上传进度条

    jQuery文件上传插件jQuery Upload File 有上传进度条 jQuery文件上传插件jQuery Upload File,插件使用简单,支持单文件和多文件上传,支持文件拖拽上传,有进度 ...

  3. DVWA 黑客攻防演练(五)文件上传漏洞 File Upload

    说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映 ...

  4. Php文件上传类class.upload.php

    简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮助你快速的给自己的网站集成上传文件功能.不仅如此,此分类还有一些列的处理功能,可以对上传的文件或者本地的文件进行处 ...

  5. Spring MVC-表单(Form)标签-文件上传(File Upload)示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_upload.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显 ...

  6. JQuery文件上传插件JQuery.upload.js的用法简介

    JQuery文件上传插件,这个插件很小,用法很简单,效果却很棒.注意:JQuery版本要求1.8及以上,大家执行如果没效果,则检查JQuery版本,如果是1.8及以上,则该插件源码中的.size()需 ...

  7. 文件上传漏洞靶场:upload-labs安装及第一关教程

    注:本文仅供学习使用,请勿用于非法操作,后果与作者无关!!! 一.简介 upload-labs是一个使用php语言编写的,专门收集渗透测试过程中遇到的各种上传漏洞的靶场.旨在帮助大家对上传漏洞有一个全 ...

  8. vuetify | vue | 文件上传组件 | file | upload | form input[type="file"]

    今天无聊地写vuecli3听歌的时候,遇到了上传文件到Django的自我需求,然后就到vuetify的表单组件里找upload btn,发现居然没有!!! 顿时惊了个呆,要知道之前用element做操 ...

  9. 文件上传之靶场upload-labs (1-10)

    第一关 sj 绕过 源码如下: lasIndexOf是返回函数最后一次出现的地方(从右到左) substring是用来截取函数的 indexOf是返回 表示从.出现的地方开始截取并判断是否在允许的字符 ...

随机推荐

  1. NET 线程可传递参数

    1.多线程执行方法 /// <summary> /// 随机数保存队列 /// </summary> private Queue<string> _randomQu ...

  2. vue全家桶项目应用断断续续的记录

    一.引用axios插件报错 axios使用文档 Cannot read property 'protocol' of undefined 解决方法:在mainjs文件中把axios引入vue的原型函数 ...

  3. 【Linux】扩展阿里云数据盘分区和文件系统

    扩容云盘只是扩大存储容量,不会扩容文件系统 一.准备工作 在扩展数据盘扩展分区和文件系统前,请提前完成以下工作. 创建快照以备份数据,防止操作失误导致数据丢失. 通过ECS控制台或者API扩容云盘容量 ...

  4. 【原创】Centos 7 升级安装python3.7.4

    1.安装必须的软件 #更新源中包列表 yum -y update #先安装扩展源EPEL 才能安装pip 否则会报错 yum -y install epel-release //解决ssl问题,否则报 ...

  5. 网络协议SNMP分析技术

    内容一: 1. 打开Ethereal软件开始抓包, 输入命令: snmputil get [目标主机IP地址] public .1.3.6.1.2.1.1.2.0 停止抓包.对SNMP包进行过滤. 2 ...

  6. PAC在异常检测中的应用

    注:资料均来源于网络,本文只做知识分享,如侵立删,谢谢. PAC算法背景简述: 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律.多变量大数据集无疑会为研 ...

  7. Provider和Consumer的搭建(六)

    创建三个Maven Project: dubbo-service:公共模块,包括服务接口(packaging:jar) dubbo-service-impl:服务提供方,提供服务接口的具体实现,需要依 ...

  8. Django简介(MVC、MTV)

    Django简介 MVC Model(模型)- 应用程序中处理数据逻辑部分且与数据库交互,用于存取数据的部分 View(视图)- 用于处理后的数据界面展示,且视图通常是由模型数据创建的,是用户看到并与 ...

  9. Spring Cloud版本 version命名说明 (Edgware)

    Spring Cloud版本 version命名说明 (Edgware)   版权声明:guofangsky 版权所有,转载不究. https://blog.csdn.net/guofangsky/a ...

  10. SPOJ - Triple Sums

    [传送门] FFT第一题! 构造多项式 $A(x) = \sum x ^ {s_i}$. 不考虑题目中 $i < j < k$ 的条件,那么 $A^3(x)$ 每一项对应的系数就是答案了. ...