upload-labs-14-21关

目录

Upload-labs-14-17(图片信息验证,配合漏洞)

 Upload-labs-18(二次渲染/条件竞争)

Upload-labs-19(和18关同理)

Upload-labs-20(文件夹伪造)

Upload-labs-21(数组接受+目录命名)


Upload-labs-14-17(图片信息验证,配合漏洞)

文件包含漏洞原理:

以包含的文件以脚本格式去执行,file为文件包含的参数值。也就是以脚本执行文件包含所具有的特征值,特征值也就是所包含文件的特征

http://192.168.3.12/upload/include.php?file=upload/7220220822184847.jpg

图片马制作(windows):

Copy xx.jpg/B + shell.php/A muma.jpg

图片马执行条件:

Php版本为5.45及以上,如果版本太低,对方服务器可能解析不出图片马的php格式

演示:

上传文件,并复制连接

点击文件包含漏洞

upload-labs-14-21关_第1张图片

通过页面提示得知,file值为文件包含值,把图片路径粘贴到?file=的后面

upload-labs-14-21关_第2张图片

运行后门

upload-labs-14-21关_第3张图片

函数学习:

getimagesize() 获取图像信息

exif_imagetype() 获取图片类型

imagecreatefromjpeg() 为二次渲染,如果是图片的话是true否则false

原理:

查看源代码可知,如果不是图像信息,函数无法正常执行,所以就只能上传图片马,但是只能上传图片的话不配合其他漏洞,这个后门代码就不可能能释放出来,所以14-17关方法一致。都是有文件包含漏洞,因为上传图片就只能是上传图片,如果不去配合其他漏洞的话就没有意义了。

 Upload-labs-18(二次渲染/条件竞争)


通过源代码得知安全验证是在后面的if判断语句,且前面的的移动文件前并没有做任何过滤,所以可以利用条件竞争原理来上传shell.php以阻止后面的安全验证。所谓条件竞争也可以说是资源占用这是系统的特性,当上传php文件的一瞬间立刻访问

演示:

如图,右键发送到intruder模块

upload-labs-14-21关_第4张图片

选中ip的主机号

upload-labs-14-21关_第5张图片

选中模块number,从1到255攻击间隔为1次,不断地发送请求,并攻击

upload-labs-14-21关_第6张图片

upload-labs-14-21关_第7张图片

此时访问网址,一直重复即可

可利用python脚本两边跑:

import requests
url = 'http://192.168.3.12/upload/upload/muma.php'

p = 1
while p:
    resp = requests.get(url)
    status = resp.status_code
    if status == 200:
        print("ok!")
        p = 0
    else:
        pass

最后通过不断的访问,在访问占用中导致后面的if安全验证不能执行,成功上传php后门文件

upload-labs-14-21关_第8张图片

(不要问我为什么你跑不出来)

Upload-labs-19(和18关同理)

后门代码:访问php时后门的生成

fputs(fopen('shell.php','w'),'')?>

Upload-labs-20(文件夹伪造)

知识点1:内置函数的漏洞

$file_ext = pathinfo($file_name,PATHINFO_EXTENSION);//获取文件后缀名

知识点2:文件目录上的问题

文件夹伪造 upload.php/.

弱智题了解就行

上传方法:大小写绕过,空格绕过,点绕过,post之%00截断等

本题脚本利用的CVE-漏洞:CVE-2015-2348

Upload-labs-21(数组接受+目录命名)

源代码分析

reset()获取前面的文件名,不带后缀的

上传思路:

  1. 修改文件类型为
  2. 修改数组最后一个值为允许后缀

演示:

用bp抓取一个上传的php后门

upload-labs-14-21关_第9张图片

修改数据包信息,文件类型为Content-Type:image/jpeg,并添加如图选中的代码。

注意(在添加数据类型的时候要注意格式包括换行的间隙,可以通过前面save_name进行参考)

 upload-labs-14-21关_第10张图片

上传即可成功

upload-labs-14-21关_第11张图片

原理:

通过源代码可以发现允许文件后缀的数组的验证是$file上传文件数组中最后的一个值,也就是说save_name[2],100也行,主要是绕过后缀名的数组验证。由于save_name[0]是为了能让代码符合,即文件的第一个数组再拼接文件数组-1的文件由于数组[2-1]刚好是空白,所以成功上传了

你可能感兴趣的:(#,文件上传,安全)