目录
Upload-labs-14-17(图片信息验证,配合漏洞)
Upload-labs-18(二次渲染/条件竞争)
Upload-labs-19(和18关同理)
Upload-labs-20(文件夹伪造)
Upload-labs-21(数组接受+目录命名)
文件包含漏洞原理:
以包含的文件以脚本格式去执行,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格式
演示:
上传文件,并复制连接
点击文件包含漏洞
通过页面提示得知,file值为文件包含值,把图片路径粘贴到?file=的后面
运行后门
函数学习:
getimagesize() 获取图像信息
exif_imagetype() 获取图片类型
imagecreatefromjpeg() 为二次渲染,如果是图片的话是true否则false
原理:
查看源代码可知,如果不是图像信息,函数无法正常执行,所以就只能上传图片马,但是只能上传图片的话不配合其他漏洞,这个后门代码就不可能能释放出来,所以14-17关方法一致。都是有文件包含漏洞,因为上传图片就只能是上传图片,如果不去配合其他漏洞的话就没有意义了。
通过源代码得知安全验证是在后面的if判断语句,且前面的的移动文件前并没有做任何过滤,所以可以利用条件竞争原理来上传shell.php以阻止后面的安全验证。所谓条件竞争也可以说是资源占用这是系统的特性,当上传php文件的一瞬间立刻访问
演示:
如图,右键发送到intruder模块
选中ip的主机号
选中模块number,从1到255攻击间隔为1次,不断地发送请求,并攻击
此时访问网址,一直重复即可
可利用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后门文件
(不要问我为什么你跑不出来)
后门代码:访问php时后门的生成
fputs(fopen('shell.php','w'),'')?>
知识点1:内置函数的漏洞
$file_ext = pathinfo($file_name,PATHINFO_EXTENSION);//获取文件后缀名
知识点2:文件目录上的问题
文件夹伪造 upload.php/.
弱智题了解就行
上传方法:大小写绕过,空格绕过,点绕过,post之%00截断等
本题脚本利用的CVE-漏洞:CVE-2015-2348
源代码分析
reset()获取前面的文件名,不带后缀的
上传思路:
演示:
用bp抓取一个上传的php后门
修改数据包信息,文件类型为Content-Type:image/jpeg,并添加如图选中的代码。
注意(在添加数据类型的时候要注意格式包括换行的间隙,可以通过前面save_name进行参考)
上传即可成功
原理:
通过源代码可以发现允许文件后缀的数组的验证是$file上传文件数组中最后的一个值,也就是说save_name[2],100也行,主要是绕过后缀名的数组验证。由于save_name[0]是为了能让代码符合,即文件的第一个数组再拼接文件数组-1的文件由于数组[2-1]刚好是空白,所以成功上传了