文件上传漏洞

1.未过滤或本地过滤

未过滤和本地过滤的共同点是在服务器端都未过滤,这里的未过滤是指没有限制任何格式的文件上传,就是一个简单的文件上传功能。

<?php move_uploaded_file($_file,$files)

2.黑名单扩展名过滤绕过

黑名单的缺点:

1)限制的后缀名不够齐全,上传文件格式不可预测性导致了可能会有漏网之鱼

例如:$savefile=preg_replace('/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i','_\\1\\2',$savefile)

解析asp语言的后缀名.cdx就不在这个列表里,一旦漏洞一个就相当没做限制

2)截断文件名来绕过黑名单限制

例如:1.php%00.jpg //验证后缀名时为jpg, 写入时被%00截断,最终写入1.php

3)验证后缀名的方式存在漏洞可以直接绕过

黑名单payload:

$disallowed_type=array('php','asp','apsx'); //获取不允许上传的文件类型

$fileext=strtolower(getExt($_FILES['file']['name']));  //获取文件扩展名

白名单payload:

this->alowexts=$alowexts; //获取允许上传的类型

$fileext=fileext($file['name']); //获取文件扩展名

例如:"1.php " //后面有一个空格

3.文件头,content-type验证绕过

通过在文件头里面加上GIF89a后上传,则验证通过

payload:

<?php print_r(getimagesize('1.gif'));?>  //图片文件头是GIF89a

content-type是在http request的请求头里面,所有这个值可以有请求者自定义修改

payload:

<?php $type=$_FILES['img']['type'];

if(($type=='image/pjpeg')||($type=='image/jpg')||($type=='image/jpeg')||($type=='image/gif')||($type=='image/bmp')||($type=='image/png')||($type=='image/x-png'))

{//uploading}?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值