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

第十一关

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.

 

猜你喜欢

转载自www.cnblogs.com/heguoze/p/12008849.html