当前位置: 首页 > article >正文

文件上传漏洞测试

upload-labs16关

源码:

function isImage($filename){
    //需要开启php_exif模块
    $image_type = exif_imagetype($filename);
    switch ($image_type) {
        case IMAGETYPE_GIF:
            return "gif";
            break;
        case IMAGETYPE_JPEG:
            return "jpg";
            break;
        case IMAGETYPE_PNG:
            return "png";
            break;    
        default:
            return false;
            break;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

准备好图片以及代码,使用通过cmd终端,使用copy ceshi.jpg/b+test.php/a test.jpg生成图片木马以及打开php_exif

查看是否包含成功要加file

然后使用中国蚁剑

upload-labs20关

$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","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");

        $file_name = $_POST['save_name'];
        $file_ext = pathinfo($file_name,PATHINFO_EXTENSION);

        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 . '文件夹不存在,请手工创建!';
    }
}

分析:
黑名单机制:
代码定义了一个黑名单数组 $deny_ext,包含常见的危险文件扩展名(如 .php、.jsp、.asp 等)。
使用 pathinfo() 函数获取文件扩展名,并检查是否在黑名单中。
文件保存逻辑:
如果文件扩展名不在黑名单中,文件会被保存到服务器。
文件保存路径为 UPLOAD_PATH . '/' . $file_name,文件名由用户控制。
潜在漏洞:
黑名单可能不完整,攻击者可以使用未列入黑名单的扩展名(如 .php7、.phar 等)。
文件名由用户控制,攻击者可能通过特殊文件名绕过检查。
方法:
1、使用未列入黑名单的扩展名
黑名单中可能遗漏了一些危险扩展名,例如 .php7、.phar、.phtml 等。
攻击者可以将恶意文件保存为这些扩展名。
2、使用双扩展名
攻击者可以在文件名中使用双扩展名(如 shell.jpg.php),利用黑名单检查的漏洞。
如果黑名单检查仅验证最后一个扩展名(.php),文件会被拒绝。
但如果黑名单检查不严谨,文件可能会被成功上传。


http://www.kler.cn/a/579589.html

相关文章:

  • Java 大视界 -- Java 大数据在智慧交通信号灯智能控制中的应用(116)
  • TCP/IP 5层协议簇:网络层(ICMP协议)
  • 论文阅读-秦汉时期北方边疆组织的空间互动模式与直道的定位(中国)
  • 自学微信小程序的第十二天
  • lodash手写源码-cloneDeep,debounce,throttle
  • 【并发】 synchronized 关键字详解
  • 实现一键不同环境迁移ES模板
  • Mysql配置文件My.cnf(my.ini)配置参数说明
  • 如何判断住宅IP与机房IP的方法
  • 双击PPT文件界面灰色不可用,需要再次打开该PPT文件才能正常打开
  • vue基本功
  • ubuntu22.04安装RAGFlow配合DeepSeek搭建本地知识库
  • 论文阅读_角色扮演综述从人格化到个性化
  • leetcode 2070. 每一个查询的最大美丽值 中等
  • 物联网中如何解决数据安全的问题
  • 【网络安全 | 漏洞挖掘】通过JWT的IDOR实现账户接管
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules
  • 清华北大推出的 DeepSeek 教程(附 PDF 下载链接)
  • MySql的in和join对比谁更高效
  • Android中的ViewPager是什么以及有哪些用途