文件上传漏洞-绕过方式总结

文件上传绕过方式总结

前端过滤绕过

1.后缀名过滤
2.MIME文件类型过滤
  • 使用F12禁用或修改Javascript(可能会影响原本页面正常的功能)

  • 使用BurpSuite抓包修改Content-Type字段值和文件后缀名


黑名单绕过

1.等价扩展名
语言等价扩展名
aspasa, cer, cdx
aspxashx, asmx, ascx
phpphp2 php3 php4 phps phtml
jspjspx jspf

利用前提: 使用php2 phtml等需要修改配置文件,添加解析类型

image-20230428085617827

2.双写绕过

如pphphp,将php替换为空后剩下的字符也会组合成php

3.大小写绕过
4.点绕过
5.空格绕过(仅Windows环境下)
6.点空格点绕过
7…htaccess文件绕过

利用前提:

AllowOverride = Allmod_rewrite模块开启

在.htaccess中写入

SetHandler  application/x-httpd-php             //当前目录下的所有文件都会被当成php的代码来解析

上传.htaccess文件,再上传其他文件即可被当作php执行

8.apache解析机制绕过

例如上传shell.php.jjj,jjj后缀名无法解析,因此shell.php.jjj会被当做shell.php解析

9.::$DATA绕过(仅Windows环境下)

使用::$DATA不会检测其后缀名,且保持::$DATA之前的文件名。例如:shell.php::$DATA会被解析为shell.php


白名单绕过

1.%00截断

截断条件:

php版本<5.3.4且magic_quotes_gpc=off,上传路径可控

例如上传shell.jpg,在上传路径/upload/后加上shell.php%00,最终会被处理成/upload/shell.php/.jpg,/后的内容被忽略

image-20230428171406639

2.文件包含+图片马绕过

有文件包含漏洞时,制作图片马(图片马的制作方法在文末)上传,然后通过解析漏洞拿到shell

需要根据服务器代码对图片的检测方式灵活多变,例如有些只检查文件开头几个字节

3.条件竞争绕过

原理:服务器处理逻辑有问题,例如如下代码

$is_upload = false;
$msg = null;

if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_name = $_FILES['upload_file']['name'];
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){
        if(in_array($file_ext,$ext_arr)){
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);
        }
    }else{
        $msg = '上传出错!';
    }
}

问题在于,先将文件上传到服务器后,才进行白名单判断、移动、重命名等相关操作。

因此只要上传路径可知,就可以利用文件上传到服务器还未进行操作的这个间隙,访问到我们上传的原始文件。


图片马制作

1.文本方式或十六进制打开图片,直接插入代码

2.cmd中输入如下命令

copy 1.jpg/b + 2.php/a shell.php	

3.在shell.php中添加文件头、文件尾

常见图片文件头文件尾:

文件类型后缀文件头文件尾标志
JPEG.jpg/.jpegFFD8FFFFD9JFIF
PNG.png89504E47AE426082PNG IEND IHDR
GIF.gif47494638003BGIT9a
TIFF.tif/.tiff49492A004D4D2A00- II MM



本人学习记录,欢迎各位大佬指正
注:
以上仅供学习交流,未用于非法用途。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值