文件上传漏洞

文件上传漏洞原理:
开发人员未在文件上传点对文件名和文件内容做严格的过滤,导致用户可以上传恶意脚本到服务器

文件上传常用方式
1.当发现网站是iis服务器时,上传 asp或aspx 后缀类型的马
2.当上传asp的脚本文件时上传不上去,可以尝试asa或者cdx或者cer后缀类型的马,iis服务器开启了文件后缀扩展功能
3.上传服务器是apache服务器,试着上传php后缀的马
4.上传服务器中间件是tomcat中间件,上传jsp后缀类型的马
5.上传服务器中间件是weblogic中间件,上传jsp后缀类型的马
6..上传服务器中间件是nginx中间件,上传Php后缀类型的马

1.前端JS验证
    (1)上传.png文件,使用bp抓包,修改后缀为.php,直接绕过
    (2)F12检查,找到onsubmit,并直接删除它

2.(后端验证)文件类型校验(MIME校验)
    上传文件,使用bp抓包,修改Content-Type:的类型
    例如:上传.php文件,使用bp抓包
        将Content-Type: application/octet-stream 
        修改为image/png

3.文件后缀名校验,黑名单绕过
    修改文件后缀名进行绕过
    php可修改为:php3 .php4 .php5 .phtml .phtm .phps .phpt .php345 
    (注意,上传后文件可能在对方服务器没有相应的配置解析,因此不能被解析)

4.文件后缀名验证    .htaccess攻击(配置文件解析控制).user.ini配置文件
    图片马
    知识点:exif_imagetype() 函数— 判断一个图像的类型(在头部添加GIF89a,伪造成gif文件进行绕过)

    .htaccess是一个配置文件,用于运行Apache网络服务器软件的网络服务器上。
    当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,
    .htaccess文件会被Apache Web服务器软件检测并执行。
    这些.htaccess文件可以用来改变Apache Web服务器软件的配置,
    以启用/禁用Apache Web服务器软件所提供的额外功能和特性
    
    过程:上传一个.htaccess文件,接着上传包含一句话木马的4.png文件,进行绕过

    .htaccess文件内容为:
        <FilesMatch "4.png">
        SetHandler application/x-httpd-php
        AddType application/x-httpd-php .jpg    #将.jpg后缀的文件作为PHP文件解析
        </FilesMatch>
    .user.ini文件内容为:
        GIF89a
        auto_prepend_file=4.jpg

5.文件名后缀验证  拼接绕过
    使用了deldot()函数,删除文件名末尾的点,但它遇到空格会停下来
    通过  . +空格+.  进行绕过
    例如: 
    上传文件1.php,使用bp抓包,修改为1.php. .文件通过deldot()函数变为了1.php,从而进行了绕过

6.  文件名后缀验证,大小写绕过
    没有使用了strolower()函数,将后缀都转换成小写,所以通过大小写绕过
    例如:
    上传1.php文件,使用bp抓包,修改文件名为1.PhP,进行绕过

7.文件名后缀验证,空格绕过
    没有使用trim()函数对空格过滤,
    window特性对文件名的空格当作空处理,保存时,自动删除空格
    例如:
    上传一个1.php文件,使用bp抓包,在文件名后缀添加空格进行绕过
    
8.文件名后缀绕过, 点绕过
    没与使用deldot()函数进行过滤文件名后的点
    因此可在文件名后加上点进行绕过
    例如:
    上传一个1.php文件,使用bp抓包,修改文件名为1.php. 进行绕过

9.文件名后缀验证,::$DATA绕过
    ::$DATA
        Windows操作系统处理文件时的特性,为文件流,如果文件名后标记::$DATA,并没有过率,window会不检查,直接保存该文件
    例如:
    上传一个1.php文件,使用bp抓包,修改文件名为1.php::$DATA进行绕过

10.文件后缀名验证,双写绕过
     函数str_ireplace($deny_ext,"", $file_name);将文件名中出现黑名单里面的后缀全部替换为了空
    例如:
    上传一个1.php文件,使用bp抓包,修改文件名为1.phpphp进行绕过

11.文件后缀名白名单绕过,GET型%00截断
    (1) 白名单:$ext_arr = array('jpg','png','gif'); 只允许这三种类型上传
    (2)$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    上传文件名,从点的位置通过循环开始截取,而不是一次性截取,对文件名进行验证
    (3)if(in_array($file_ext,$ext_arr)){ //判断文件名是否在白名单中,如果在,则进入循环
                $temp_file = $_FILES['upload_file']['tmp_name'];//将上传的文件放在临时目录下
                $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;//使用$_GET['save_path']接受自定义的路径,并且从10~99的数组随机生产一个文件名,再拼接上后缀名
    
                if(move_uploaded_file($temp_file,$img_path)){最终保存在文件中
                   $is_upload = true;
            }
    
    %00截断原理:
    利用的是php漏洞,php的基础是C语言实现的,在C语言中认为%00为结束的符号,所以就挤出来C的特性,
    在PHP<5.3.4的版本中,在进行存储文件时碰见了move_uploaded_file()函数的时候,
    函数读取到hex值为00的字符,认为读取结束,就终止了后面的操作,因此出现00的操作
    绕过:
    上传一个1.php文件,使用bp抓包,修改文件名为1.png
    替换文件中的内容:修改?save_path=./upload/1.php%00
    释放包后完成绕过

12.文件名后缀白名单验证,POST型%00截断
    与GET型%00原理一样,但需要对%00进行编码
    上传一个1.php文件,使用bp抓包,修改文件名为1.png
    替换文件中的内容:修改?save_path=./upload/1.php%00
    编码操作:
    选中%00,右键点击Convert selection——>URL——>URL-decode
    查看Hex
    释放包完成绕过

13.文件内容检查,文件头验证
    $bin = fread($file, 2); //只读2字节
    对图片的内容进行了验证,通过检查文件的前2个字节,检查上传文件二进制的头部信息,来进行判断文件的类型
    使用图片码的方式绕过:
        1.打开cmd,使用命令制作图片码    copy 1/.jpg /b + 1.php /a shell.php
        2.直接上传,复制图片链接地址
        3.点击“文件包含漏洞地址”,进行传参
14.白名单:只允许上传'zip', 'jpg', 'gif', 'png'
    上传压缩包文件zip
    创建0123456789012345文件,压缩为zip文件,使用010打开,
    修改0123456789012345为/../../1.php.xxx,保存,上传zip文件,访问1.php.xxx
    
    https://www.cnblogs.com/murkuo/p/14915458.html

15.文件内容检查,图片二次渲染
    使用了imagecreatefrom系列的函数,上传的图片去生产一张新的图片,生成的结果会返回一个变量
    上传后把图片在新建的时候把其中的代码筛选出来,并且去除。最后只保留图片信息,在进行排序重建。
    
    第一步:打开cmd,使用gif图片和代码的文件使用命令合办一张图片    copy 1.gif /b + 1.php /a blank.gif
    第二步:上传服务器
    第三步:将第一步合并的图片使用010 Editor工具打开
    第四步:将上传服务器的图片,在upload目录下寻找,也使用010 Editor工具打开
    第五步:将两个文件进行比较Tool——>Compare Files——>Compare,比较蓝色部分没有被排列重组的地方,在第二次渲染后的图片中加入一句话木马
    第六步:把刚刚保存好的图片从upload目录下,剪切到你要上传文件的目录
    第七步:将图片重新上传到服务器上
    第八步:点击文件包含漏洞URL,传参
    
    
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值