文件上传漏洞

目录

1、原理

2、复现

2.1 .gif文件上传

 2.2 png的上传


1、原理

        文件上传漏洞是web系统中常见的一种功能,通过文件上传能实现上传图片、视频,以及其他类型的文件,但是随着web中包含的功能越来越多,潜在的网络安全风险也就越大。如果恶意用户上传了可执行的文件或者脚本,就会导致网站被其控制甚至会使其服务器沦陷,以至于引发恶意的网络安全事件。

        文件上传漏洞是指用户通过界面上的上传功能上传了一个可执行的脚本文件,而WEB端的系统并未对其进行检测或者检测的逻辑做的不够好。

2、复现

2.1 .gif文件上传

关于.gif 的源码

else if(($fileext == "gif") && ($filetype=="image/gif")){
        if(move_uploaded_file($tmpname,$target_path)){
            //使用上传的图片生成新的图片
            $im = imagecreatefromgif($target_path);
            if($im == false){
                $msg = "该文件不是gif格式的图片!";
                @unlink($target_path);
            }else{
                //给新图片指定文件名
                srand(time());
                $newfilename = strval(rand()).".gif";
                //显示二次渲染后的图片(使用用户上传图片生成的新图片)
                $img_path = UPLOAD_PATH.'/'.$newfilename;
                imagegif($im,$img_path);

                @unlink($target_path);
                $is_upload = true;
            }
        } else {
            $msg = "上传出错!";
        }

 源码分析:我们可以看到$fileext 和 $filetype 是来判断是否为.gif 格式

        使用move_uploaded_file函数来做判断条件,如果成功将文件移动到$target_path,就会进入二次渲染的代码,反之上传失败。

        由于在二次渲染时重新生成了文件名,所以可以根据上传后的文件名,来判断上传的图片是二次渲染后生成的图片还是直接由move_uploaded_file函数移动的图片。

1)首先准备一个.gif 文件将web.php 中的 融合,如图所示我们将a.gif 文件与web.php 合成了一个b.gif

文件上传漏洞_第1张图片

 用使用16进制编辑器将b.gif打开,我们可以看到 phpinfo(); 

文件上传漏洞_第2张图片

 2)上传b.gif 文件,上传之后我们再次下载上传后的图像地址,

 文件上传漏洞_第3张图片

 我们再次使用16进制打开,可以看到被渲染的图片里面已经没有 phpinfo();

文件上传漏洞_第4张图片

 3)关于绕过gif的二次渲染,我们只需要找到渲染前后没有变化的位置,然后将php代码写进去,就可以成功上传带有php代码的图片了。

文件上传漏洞_第5张图片

 然后我们包含一下,可以看到已经成功。文件上传漏洞_第6张图片

 2.2 png的上传

1)首先创建一个php文件,在同一级目录下放一个1.png的图片

 然后运行此文件,的到1111.png

文件上传漏洞_第7张图片 

我们使用记事本打开此文件,有一句话木马

文件上传漏洞_第8张图片

 然后我们上传:

我们可以看到phpinfo(); 执行成功

文件上传漏洞_第9张图片

你可能感兴趣的:(笔记)