第十一关

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. C typedef、#define

    参考链接:https://www.runoob.com/cprogramming/c-typedef.html 作用 typedef是用来为数据类型(可以是各种数据类型,包括自己定义的数据类型如结构体 ...

  2. CTF必备技能丨Linux Pwn入门教程——调整栈帧的技巧

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  3. redo log重做日志缓冲

    ---------------------------------- 2015-02-10---------------------------------- innodb redo log (重做日 ...

  4. Django 练习班级管理系统三 -- 分页

    在 user_manager 项目下创建一个 python package:utils,里面创建一个 page.py 文件 page.py 文件内容为: # 创建一个 PagerHelper 类 cl ...

  5. python之滑动认证(图片)

    from PIL import Image, ImageEnhance from io import BytesIO def cutImg(imgsrc): """ 根据 ...

  6. vs2017离线安装vs tools for unity

    Visual Studio Tools for Unity 从vs2017开始就不提供单独的安装包下载,需要通过vs安装程序在线安装. vs2017离线安装vs tools for unity 那么如 ...

  7. JS高阶---闭包面试题

    [面试题1] 答案:The Window 分析: 本案例里,不存在闭包. 条件: .函数嵌套(满足) .内部函数调用外部函数变量(没有) 综上所述,该例中不存在闭包 [面试题2] 答案:My Obje ...

  8. v8

    V8 - 开源,由Google开发,用C ++编写 Rhin- 由Mozilla基金会开源,完全用Java开发 SpiderMonkey 第一个JavaScript引擎,Netscape Naviga ...

  9. Ninja——小而快的构建系统

    介绍 Ninja 是Google的一名程序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度 ...

  10. 18-numpy笔记-莫烦pandas-6-plot显示

    代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.Series(np.random ...