文件上传之靶场upload-labs (11-20)

第十一关php

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

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

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

其中上传路径可控,能够利用这一点工具

 

 绕过方法post

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

截断条件:
一、php版本小于5.3.4
二、php.ini的magic_quotes_gpc为OFF状态编码

 

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

 

 

 第十二关线程

 和上一个关同样不过路径上传方式由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.

 

相关文章
相关标签/搜索