文件上传漏洞靶场-4

发布于 2021-11-02  55 次阅读


进入靶场环境,查看源码

我们对代码进行分析

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {/*判断是否定义变量submit*/
    if (file_exists(UPLOAD_PATH)) {/*判断UPLOAD_PATH路径是否正确或文件是否存在*/
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");
        $file_name = trim($_FILES['upload_file']['name']);/*检查上传的文件名*/
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');/*截取.后的所有字符*/
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if (!in_array($file_ext, $deny_ext)) {//判断$deny_ext中是否有$file_ext
            $temp_file = $_FILES['upload_file']['tmp_name'];/*将上传文件的临时路径赋值给$temp_file*/
            $img_path = UPLOAD_PATH.'/'.$file_name;/*UPLOAD_PATH/.$file_name*/
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

分析代码发现依旧是黑名单过滤,禁止我们上传黑名单内的后缀。后面的判断语句也使我们无从下手,这是就应想到.htaccess解析,但它只支持apache应用。它是apache伪静态的说明。

我们创建一个.htaccess的文件并上传到靶场

<FilesMatch "shana">
SetHandler application/x-httpd-php
</FilesMatch>

上传成功,接下来我们创建一个一句话木马并命名为shana。

上传到靶场环境

可以看到上传成功,我们访问这个文件并触发一句话木马,看一句话木马是否可以正常调用

可以正常调用,说明我们上传的.htaccess文件被执行,将jpg文件里的php代码也可以被执行。


我从未觉得繁琐,说浪漫些,我很爱你。