文件上传漏洞(六)

十二、目录可控%00 截断绕过

1、简介

以上都是一些黑名单被绕过的,如果黑名单上传检测后,没有限定后缀名,绕过的方法很多,与黑名单相对的就是白名单,使用白名单验证会
相对比较安全,因为只允许指定的文件后缀名。但是如果有可控的参数目录,也存在被绕过的风险。

2、代码分析

代码中使用白名单限制上传的文件后缀名,只允许指定的图片格式。但是$_GET['save_path']服务器接受客户端的值,这个值可被客户端
修改。所以会留下安全问题。

在这里插入图片描述

3、绕过攻击

上传参数可控:
1、当 gpc 关闭的情况下,可以用%00 对目录或者文件名进行截断。
2、php 版本小于 5.3.4
首先截断攻击,抓包上传将%00 自动截断后门内容。
例如:1.php%00.1.jpg 变成 1.php

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

十三、目录可控 POST 绕过

1、简介

上面是 GET 请求的,可以直接在 url 输入%00 即可截断,但是在 post 下直接注入%00 是不行的,需要把%00 解码变成空白符,截断
才有效。才能把目录截断成文件名。

2、代码分析

这段代码同样是白名单限制后缀名,$_POST['save_path']是接收客户端提交的值,客户端可任意修改。所以会产生安全漏洞。

在这里插入图片描述

3、绕过上传

文件名可控,通过抓包修改可控的参数,与不同的中间件的缺陷配合使用。
1、使用%00 截断文件名,在 post 环境下%00 要经过 decode,但是受 gpc 限制使用 burpsutie POST %00 截断文件名。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十四、文件头检测绕过

1、简介

有的文件上传,上传时候会检测头文件,不同的文件,头文件也不尽相同。常见的文件上传图片头检测,它检测图片是两个字节的长度,如果
不是图片的格式,会禁止上传。
常见的文件头:
1、JPEG (jpg),文件头:FFD8FF
2、PNG (png),文件头:89504E47
3、GIF (gif),文件头:47494638
4、TIFF (tif),文件头:49492A00
5、Windows Bitmap (bmp),文件头:424D

2、代码分析

这个是存在文件头检测的上传,getReailFileType 是检测 jpg、png、gif 的文件头,如果上传的文件符合数字即可通过检测。
function getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

3、绕过攻击

3.1 第一种方法

1.制作图片一句话,使用 copy 1.gif/b+phpinfo.php shell.php,将php文件附加再jpg图片上,直接上传即可。

在这里插入图片描述

本例子因为限制了后缀为 jpg,可以考虑文件包含将图片文件包含进去 getshell。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 第二种方法

burpsuite 上传的数据包头加上 GIF89a

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值