phpcms头像上传漏洞

news2024/11/18 15:36:39

经典版

漏洞原理:我们上传一个zip的压缩包,它会解压然后删除其中不是.jpg .gig .png的文件

  1. function check_dir($dir):这是一个PHP函数的定义,它接受一个参数 $dir,代表要检查的目录路径。

  2. $handle = opendir($dir);:使用 opendir 函数打开指定目录,并将返回的目录句柄赋值给变量 $handle

  3. while (($f = readdir($handle)) !== false):使用 readdir 函数循环读取目录中的文件,每次循环将文件名赋给变量 $f

  4. if (!in_array($f, array('.', '..'))) { ... }:在每次循环中,检查当前文件名是否为当前目录(.)或父目录(..),如果不是,则执行下面的操作。

  5. $ext = strtolower(substr(strrchr($f, '.'), 1));:使用 strrchr 函数找到文件名中的最后一个 .,然后使用 substr 截取文件扩展名,并用 strtolower 将其转换为小写。

  6. if (!in_array($ext, array('jpg', 'gif', 'png'))) { unlink($dir . $f); }:如果文件的扩展名不是jpg、gif或png,则使用 unlink 函数删除该文件。

<?php
header("Content-Type:text/html; charset=utf-8");
require_once('pclzip.lib.php');

$file = $_FILES['file'];
if ($file['size'] == 0) {
    exit("请勿上传空文件");
}
$name = $file['name'];
$dir = 'uploads/';
$ext = strtolower(substr(strrchr($name, '.'), 1));


function check_dir($dir)
{
    $handle = opendir($dir);
    while (($f = readdir($handle)) !== false) {
        if (!in_array($f, array('.', '..'))) {
            $ext = strtolower(substr(strrchr($f, '.'), 1));
            if (!in_array($ext, array('jpg', 'gif', 'png'))) {
                unlink($dir . $f);
            }
        }
    }
}


if (!is_dir($dir)) {
    mkdir($dir);
}

$temp_dir = $dir . 'member/1/';
if (!is_dir($temp_dir)) {
    mkdir($temp_dir);
}

if (in_array($ext, array('zip', 'jpg', 'gif', 'png'))) {
    if ($ext == 'zip') {
        $archive = new PclZip($file['tmp_name']);
        if ($archive->extract(PCLZIP_OPT_PATH, $temp_dir, PCLZIP_OPT_REPLACE_NEWER) == 0) {
            exit("解压失败");
        }
        check_dir($temp_dir);
        exit('上传成功!');
    } else {
        move_uploaded_file($file['tmp_name'], $temp_dir . '/' . $file['name']);
        check_dir($temp_dir);
        exit('上传成功!');
    }
} else {
    exit('仅允许上传zip、jpg、gif、png文件!');
}

如果我们把图片和php一句话木马文件一起压缩,上传后就会发现php被删除了。

绕过方法:我们把php文件单独放在一个文件夹中,然后将这个文件夹和图片一起压缩成zip,然后上传

这个bbb文件夹里面的111.php就没有被删除了,然后就可以连接蚁剑了

升级版

上面主要是没有进行递归删除导致的绕过,后面进行了递归删除

<?php
header("Content-Type:text/html; charset=utf-8");
require_once('pclzip.lib.php');

$file = $_FILES['file'];
if ($file['size'] == 0) {
    exit("请勿上传空文件");
}
$name = $file['name'];
$dir = 'uploads/';
$ext = strtolower(substr(strrchr($name, '.'), 1));


function check_dir($dir)
{
    $handle = opendir($dir);
    while (($f = readdir($handle)) !== false) {
        if (!in_array($f, array('.', '..'))) {
            if (is_dir($dir . $f)) {
                check_dir($dir . $f . '/');
            } else {
                $ext = strtolower(substr(strrchr($f, '.'), 1));
                if (!in_array($ext, array('jpg', 'gif', 'png'))) {
                    unlink($dir . $f);
                }
            }
        }
    }
}


if (!is_dir($dir)) {
    mkdir($dir);
}

$temp_dir = $dir . 'member/1/';
if (!is_dir($temp_dir)) {
    mkdir($temp_dir);
}

if (in_array($ext, array('zip', 'jpg', 'gif', 'png'))) {
    if ($ext == 'zip') {
        // $zip = new ZipArchive;
        // if(!$zip->open($file['tmp_name'])) {
        //     echo "fail";
        //     return false;
        // }

        // if(!$zip->extractTo($temp_dir)) {
        //     // check_dir($temp_dir);
        //     exit('fail to zip');
        // }
        $archive = new PclZip($file['tmp_name']);
        if ($archive->extract(PCLZIP_OPT_PATH, $temp_dir, PCLZIP_OPT_REPLACE_NEWER) == 0) {
            exit("解压失败");
        }
        check_dir($temp_dir);
        exit('上传成功!');
    } else {
        move_uploaded_file($file['tmp_name'], $temp_dir . '/' . $file['name']);
        check_dir($temp_dir);
        exit('上传成功!');
    }
} else {
    exit('仅允许上传zip、jpg、gif、png文件!');
}

我们发现,bbb中的111.php就被删除了

但是代码逻辑是先解压,后删除,我们就用条件竞争来绕过

因为我发现,同时使用burp上传和访问,经过多次尝试没有成功,我换了个操作,使用手动上传zip,burp访问php,多次手动上传之后,成功了

在我们的uploads下面生成了一句话木马文件,直接连蚁剑

至此,phpcms告一段落

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1507910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公众号如何获取视频号下载工具?

视频内容已经成为信息传播的重要载体&#xff0c;微信视频号作为国内主流的短视频平台之一&#xff0c;深受用户喜爱。有时我们想要保存喜欢的视频以供日后观看&#xff0c;这时就需要借助一些公众号提供的视频号下载工具。 本文将详细解析如何利用这些工具&#xff0c;让你轻…

OpenText Availability——适用于 Windows 和 Linux 服务器的高可用性和灾难恢复解决方案

OpenText Availability——适用于 Windows 和 Linux 服务器的高可用性和灾难恢复解决方案 连续复制&#xff0c;最大限度地减少数据丢失快速故障转移&#xff0c;最大限度地减少停机时间可忽略的性能影响支持物理、虚拟和基于云的系统平台 停机从多种途径侵扰 IT 企业。 从相…

Mybatis的使用快速入门

1. 数据库准备 假设目前存在以下数据库表。 CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );2. 依赖导入 pom.xml <dependencies><!-- mybatis依赖 --><dependency><groupId>or…

仿牛客网项目---项目总结

本篇文章是对整个项目的一个总结。下面这张图要好好理解。 整个项目都是构建在SpringBoot之上的&#xff0c;所以把它画到最底下&#xff0c;其它技术依托在springboot之上。但是springboot并不是技术的核心&#xff0c;而只是起到了一个辅助的作用&#xff0c;它的作用仅仅是降…

2024自动化测试入门分析!

1、回归到具体的测试本质工作 产品质量很难孤立的去看&#xff0c;不管是自动化测试还是业务测试&#xff0c;最终的目的都是为了产 品质量服务&#xff0c;从而打造很酷很好的产品来赋能客户 测试的工作就是质量管理以及测试效率的提升。质量管理是一个比较大的话题&#x…

项目管理软件:如何确保项目启动顺利?

对所有项目经理来说&#xff0c;了解如何启动项目是最关键的技能之一。项目都是从小事开始&#xff0c;逐渐发展为更大型、更复杂的。好的开始是成功的一半&#xff0c;对项目管理来说更是如此。 启动项目的 10 个简单步骤 即使是最复杂的项目&#xff0c;也可以分解成简单的…

亚马逊、速卖通卖家自养号测评细节需要掌握的哪几点?

亚马逊&#xff0c;跨境电商的巨头&#xff0c;早已成为业界的热门话题。如今&#xff0c;越来越多的卖家渴望在亚马逊的舞台上崭露头角&#xff0c;这也使得市场竞争愈发激烈。在亚马逊的丛林中&#xff0c;Review成为影响卖家命运的关键因素。它不仅影响亚马逊对卖家账号的评…

关于DSP C6678的另一种引导启动方法

之前通过自启动已经将C6678的Core0和Core1都实现了启动。方法在之前的文章里面已经提及&#xff1a; C6678 EMIF NOR FLASH自启动方法-CSDN博客 这种启动方式是Core0和Core1工程里面都加了boot.asm&#xff0c;通过EMIF NOR FLASH特性&#xff0c;每个核自动搬移各个字段&…

[VulnHub靶机渗透] Nullbyte

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

路由器动态路由配置

本博客为观看湖科大的教书匠系列计算机网络视频的学习笔记。 静态路由选择动态路由选择采用人工配置的方式给路由器添加网络路由、默认路由和特定主机路由等路由条目。路由器通过路由选择协议自动获取路由信息。静态路由选择简单、开销小&#xff0c;但不能及时适应网络状态(流…

灭火新选择:便携式森林灭火泵,轻巧而强大

随着人类对自然环境的破坏&#xff0c;森林火灾频发&#xff0c;给生态环境和人民生命财产安全带来严重威胁。为了有效地应对森林火灾&#xff0c;恒峰研发出了一种便携式森林灭火泵&#xff0c;它将成为森林火灾的守护神。本文将详细介绍便携式森林灭火泵的特点、优势以及使用…

ORACLE RAC数据库压力测试(swingbench)

------------------------------------------------------------------- 欢迎关注作者 墨天伦:潇湘秦的个人主页 - 墨天轮 CSDN:潇湘秦-CSDN博客 公众号:潇湘秦的DBA之路 ------------------------------------------------------------------- 为了验证跑在虚拟机上的or…

WhatsApp模板信息申请大全:更好地触达WhatsApp客户

按照WhatsApp通话规则&#xff0c;用户主动和我们开始聊天后的24小时内&#xff0c;我们也是可以通过WhatsApp无限次数地与对方进行自定义消息对话&#xff0c;并且只计为一次服务型会话费用。 但是如果超过了24小时&#xff0c;我们还希望可以继续联系对方的话&#xff0c;只…

1688 API接口在数据分析与营销决策中的应用探索

在当今数字化快速发展的时代&#xff0c;数据分析与营销决策已成为企业运营中不可或缺的重要环节。而1688 API接口&#xff0c;作为阿里巴巴旗下的一个强大的数据交互平台&#xff0c;为企业在数据分析与营销决策方面提供了丰富的数据源和灵活的操作方式。本文将深入探讨1688 A…

每日OJ题_路径dp⑤_力扣64. 最小路径和

目录 力扣64. 最小路径和 解析代码 力扣64. 最小路径和 64. 最小路径和 难度 中等 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示…

Docker常用基础指令

目录 1 前言 2 常用指令 2.1 获取帮助 2.2 拉取镜像到本地 2.3 对本地镜像进行打包 2.4 对本地镜像的删除 2.5 通过tar包加载本地镜像 2.6 查看所有镜像 2.7 创建新的容器 2.8 查看容器 2.9 停止容器运行 2.10 运行容器 2.11 删除容器 2.12 查看容器日志 2.13 进…

应用资料 | 电动工具直流调速专用集成电路GS069

01 产品简介 GS069是CMOS工艺、电动工具直流调速专用集成电路。具有电源电压范围宽、功耗小、抗干扰能力强等特点。 应用范围&#xff1a;广泛应用于各种电动工具。 02 产品基本参数 03 产品应用 1、应用图&#xff1a; 2、测试参数&#xff1a;&#xff08;VCC9V&…

智慧公厕:提升城市形象与民生满意度的智能解决方案

智慧公厕是指通过智能化设备和系统&#xff0c;实现公共厕所的智能管理和智慧化服务的一种先进解决方案。它不仅可以紧跟政策要求&#xff0c;提升城市的整体形象&#xff0c;还能提供舒适的用厕环境&#xff0c;改善市民群众的生活品质。本文以智慧公厕源头实力厂家广州中期科…

墨水屏电子桌牌选购攻略:打造企业现代形象!

随着科技的不断发展&#xff0c;墨水屏电子会议桌牌作为一种新型的会议辅助工具&#xff0c;不仅能够提升会议效率&#xff0c;还能展现企业的现代化形象。然而&#xff0c;面对市场上琳琅满目的产品&#xff0c;企业如何选购合适的墨水屏电子会议桌牌呢&#xff1f;下面&#…

Linux快速入门学习-2 Linux安装环境准备

文章目录 Linux发展前景及就业形势Windows操作系统简介硬盘分区简介Linux安装环境准备Linux系统安装图解 Linux发展前景及就业形势 权威部门统计&#xff0c;未来几年内我国软件行业的从业机会十分庞大&#xff0c;中国每年对IT软件人才的需求将达到200万人左右。而对于Linux专…