WellCMS 2.0 Beta3 后台任意文件上传

一、概述

WellCMS是一款开源、倾向移动端的轻量级CMS,高负载CMS,亿万级CMS,是大数据量、高并发访问网站最佳选择的轻CMS。登陆该CMS后台,某图片上传处,由于上传文件类型可控,可修改上传文件类型获取webshell。

二、复现

这个漏洞来自一次偶然的测试,一次幸运的测试,那就直接写出我的测试过程。

第一步,登陆该CMS后台:

第二步,进入“后台管理“,定位利用点,点击下图红框中图片进行上传:

上传并抓取数据包:

第三步,修改post包中“filetype”参数类型为“php”;经分析 “data”参数为base64加密,这里我们将测试数据“<?php phpinfo();?>”经过base64加密等构造,形成“data”参数的数据:data%3Aimage%2Fjpeg%3Bbase64%2CPD9waHAgcGhwaW5mbygpOz8%2B,最后数据包放行,返回成功上传为php文件的路径:

最后,尝试访问,成功:

三、大致分析

根据漏洞定位代码文件:route/attach.php,代码如下:

if ($action == ‘create‘) {
    // hook attach_create_start.php
    user_login_check();
    // hook attach_create_check_after.php
    $backstage = param(2, 0);
    $width = param(‘width‘, 0);
    $height = param(‘height‘, 0);
    $is_image = param(‘is_image‘, 0); // 图片
    $name = param(‘name‘);
    $data = param_base64(‘data‘);
    $mode = param(‘mode‘, 0); // 上传类型 1主图
    $filetype = param(‘filetype‘); // 压缩图片后缀jpeg jpg png等
    $convert = param(‘convert‘, 0); // 图片转换压缩 = 1
    $n = param(‘n‘, 0); // 对应主图赋值
    $type = param(‘type‘, 0); // type = 0则按照SESSION数组附件数量统计,type = 1则按照传入的n数值
    // hook attach_create_before.php
    // 允许的文件后缀名
    //$types = include _include(APP_PATH.‘conf/attach.conf.php‘);
    //$allowtypes = $types[‘all‘];
    empty($group[‘allowattach‘]) AND $gid != 1 AND message(2, ‘您无权上传‘);
    // hook attach_create_center.php
    empty($data) AND message(1, lang(‘data_is_empty‘));
    //$data = base64_decode_file_data($data);
    $size = strlen($data);
    $size > 20480000 AND message(1, lang(‘filesize_too_large‘, array(‘maxsize‘ => ‘20M‘, ‘size‘ => $size)));
    // hook attach_create_file_ext_start.php
    // 获取文件后缀名 111.php.shtmll
    $ext = file_ext($name, 7);
    $filetypes = include APP_PATH . ‘conf/attach.conf.php‘;
    // hook attach_create_file_ext_before.php
    //主图必须为图片
    if ($is_image == 1 && $mode == 1 && !in_array($ext, $filetypes[‘image‘])) message(1, lang(‘well_up_picture_error‘));

    // hook attach_create_file_ext_center.php

    // 如果文件后缀不在规定范围内 改变后缀名
    //!in_array($ext, $filetypes[‘all‘]) AND $ext = ‘_‘ . $ext;
    if (!in_array($ext, $filetypes[‘all‘])) {
        $ext = ‘_‘ . $ext;
    } else {
        // CMS上传图片
        $t == 1 AND $convert == 1 AND $is_image == 1 AND $ext = $filetype;
    }
    // hook attach_create_file_ext_after.php
    $tmpanme = $uid . ‘_‘ . xn_rand(15) . ‘.‘ . $ext;
    // hook attach_create_tmpanme_after.php
    $tmpfile = $conf[‘upload_path‘] . ‘tmp/‘ . $tmpanme;
    // hook attach_create_tmpfile_after.php
    $tmpurl = $conf[‘upload_url‘] . ‘tmp/‘ . $tmpanme;
    // hook attach_create_tmpurl_after.php
    $filetype = attach_type($name, $filetypes);
    // hook attach_create_save_before.php
    file_put_contents($tmpfile, $data) OR message(1, lang(‘write_to_file_failed‘));
    // hook attach_create_save_after.php
    // 保存到 session,发帖成功以后,关联到帖子。
    // save attach information to session, associate to post after create thread.
    // 抛弃之前的 $_SESSION 数据,重新启动 session,降低 session 并发写入的问题
    // Discard the previous $_SESSION data, restart the session, reduce the problem of concurrent session write
    sess_restart();
    empty($t) AND empty($_SESSION[‘tmp_files‘]) AND $_SESSION[‘tmp_files‘] = array();
    $t == 1 AND empty($_SESSION[‘tmp_website_files‘]) AND $_SESSION[‘tmp_website_files‘] = array();

    // hook attach_create_after.php
    // type = 0则按照SESSION数组附件数量统计,type = 1则按照传入的n数值
    empty($type) AND $n = ($t == 1) ? count($_SESSION[‘tmp_website_files‘]) : count($_SESSION[‘tmp_files‘]);
    $filesize = filesize($tmpfile);
    $attach = array(
        ‘backstage‘ => $backstage, // 0前台 1后台
        ‘url‘ => $backstage ? ‘../‘ . $tmpurl : ‘‘ . $tmpurl,
        ‘path‘ => $tmpfile,
        ‘orgfilename‘ => $name,
        ‘filetype‘ => $filetype,
        ‘filesize‘ => $filesize,
        ‘width‘ => $width,
        ‘height‘ => $height,
        ‘isimage‘ => $is_image,
        ‘downloads‘ => 0,
        ‘aid‘ => ‘_‘ . $n
    );
    // hook attach_create_array_after.php
    if ($mode == 1) {
        // hook attach_create_thumbnail_beofre.php
        $_SESSION[‘tmp_thumbnail‘] = $attach;
        // hook attach_create_thumbnail_after.php
    } else {
        // hook attach_create_website_files_beofre.php
        // 0 BBS 1 CMS
        $t == 1 ? $_SESSION[‘tmp_website_files‘][$n] = $attach : $_SESSION[‘tmp_files‘][$n] = $attach;
        // hook attach_create_website_files_after.php
    }
    // hook attach_create_session_after.php
    unset($attach[‘path‘]);
    // hook attach_create_end.php
    message(0, $attach);
}

大致流程:
1、 首先,接受相关参数,将filetype自行设置成“php”:

$data = param_base64(‘data‘);
$filetype = param(‘filetype‘); /

2、 进行逻辑判断:

if (!in_array($ext, $filetypes[‘all‘])) {
        $ext = ‘_‘ . $ext;
    } else {
        // CMS上传图片
        $t == 1 AND $convert == 1 AND $is_image == 1 AND $ext = $filetype;
    }

3、 最后成功写入:

$tmpanme = $uid . ‘_‘ . xn_rand(15) . ‘.‘ . $ext;
    // hook attach_create_tmpanme_after.php
    $tmpfile = $conf[‘upload_path‘] . ‘tmp/‘ . $tmpanme;
    // hook attach_create_tmpfile_after.php
    $tmpurl = $conf[‘upload_url‘] . ‘tmp/‘ . $tmpanme;
    // hook attach_create_tmpurl_after.php
    $filetype = attach_type($name, $filetypes);
    // hook attach_create_save_before.php
    file_put_contents($tmpfile, $data) OR message(1, lang(‘write_to_file_failed‘));

原文地址:https://www.cnblogs.com/0daybug/p/12393857.html

时间: 2024-10-12 11:57:46

WellCMS 2.0 Beta3 后台任意文件上传的相关文章

DocCms存储型XSS+后台任意文件下载上传+目录删除+sql执行(有条件可getshell)

下载链接 https://share.weiyun.com/46ebceb4fe91da144ad2661522a941e1 留言处存储型XSS 漏洞在content/guestbook/index.php function create() { echo 123; global $db,$request; if ($_SESSION['verifycode'] != $request['checkcode']) { echo '<script>alert("请正确填写验证码!&qu

PHP任意文件上传漏洞CVE-2015-2348浅析

昨晚安全新闻爆出一个“PHP任意文件上传漏洞”,CVE编号为:CVE-2015-2348. 当时楼主正准备收拾东西回家,看到这个新闻心里一惊:失传江湖多年的0字符截断上传漏洞又重现了?而且还影响这么多版本!如果漏洞属实,看来今晚又要通宵打补丁了啊. 不过经过简单分析后,发现漏洞的利用条件相当苛刻(很多人好奇到底有多苛刻),楼主简单记录自己的分析过程和大家分享一下,如有不当,请多多指正. 一.漏洞概述 漏洞报告者说php的上传函数 move_uploaded_file的目的路径参数可以使用空字符截

WebLogic任意文件上传漏洞(CVE-2019-2618)

WebLogic任意文件上传漏洞(CVE-2019-2618) 0x01 漏洞描述 漏洞介绍 CVE-2019-2618漏洞主要是利用了WebLogic组件中的DeploymentService接口,该接口支持向服务器上传任意文件.攻击者突破了OAM(Oracle Access Management)认证,设置wl_request_type参数为app_upload,构造文件上传格式的POST请求包,上传jsp木马文件,进而可以获得整个服务器的权限. 影响版本 WebLogic 10.3.6.0

通达OA 任意文件上传+文件包含导致RCE漏洞复现

0X00漏洞简介 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化系统,包括流程审批.行政办公.日常事务.数据统计分析.即时通讯.移动办公等. 该漏洞被黑产利用,用于投放勒索病毒 该漏洞在绕过身份验证的情况下通过文件上传漏洞上传恶意php文件,组合文件包含漏洞最终造成远程代码执行漏洞,从而导致可以控制服务器system权限. 0X01漏洞影响 V11版.2017版.2016版.2015版.2013增强版.2013版 0X02漏洞原理

【原创】JEECMS v6~v7任意文件上传漏洞(1)

文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定.安全.高效.跨平台等多方面的优点:采用SpringMVC3+Spring3+Hibernate3+Freemarker主流技术架构.广泛应用于政府(部委和省级政府部门.市.县.乡及委办局).教育科研(大.中.小学及各地方教育局).电信运营商.金融(证券.保险及银行).企业(矿业.煤炭.旅游.石油集

网站漏洞修复之UEditor漏洞 任意文件上传漏洞 2018 .net新

UEditor于近日被曝出高危漏洞,包括目前官方UEditor 1.4.3.3 最新版本,都受到此漏洞的影响,ueditor是百度官方技术团队开发的一套前端编辑器,可以上传图片,写文字,支持自定义的html编写,移动端以及电脑端都可以无缝对接,自适应页面,图片也可以自动适应当前的上传路径与页面比例大小,一些视频文件的上传,开源,高效,稳定,安全,一直深受站长们的喜欢. 百度的UEditor文本编辑器,近几年很少被曝出漏洞,事情没有绝对的,总会有漏洞,这次被曝出的漏洞是.net版本的,其他的php

漏洞复现 - Tomcat任意文件上传漏洞(CVE-2017-12615)

漏洞原理 Tomcat配置文件web.xml中,servlet配置了readonly=fasle时,会引发任意文件上传漏洞. readonly参数默认是true,即不允许delete和put操作,所以通过XMLHttpRequest对象的put或者delete方法访问就会报告http 403错误.但很多时候为了支持REST服务,会设置该属性为false. 复现环境 在ubuntu 16.04虚拟机中用vulhub靶场提供的docker容易来复现 jdk版本1.7 Tomcat版本8.5.19 复

CVE-2019-2618 任意文件上传

漏洞描述:CVE-2019-2618漏洞主要是利用了WebLogic组件中的DeploymentService接口,该接口支持向服务器上传任意文件.攻击者突破了OAM(Oracle Access Management)认证,设置wl_request_type参数为app_upload,构造文件上传格式的POST请求包,上传jsp木马文件,进而可以获得整个服务器的权限. 受影响WebLogic版本:10.3.6.0.12.1.3.0.12.2.1.3. 这个漏洞比较鸡肋,刚好有靶场,就复现下 漏洞

6.28笔记-servlet3.0注解配置、文件上传、过滤器、监听器

一.servlet3.0注解配置 使用javaEE6.0 支持servlet3.0 value的值就是访问路径 urlPatterns的值也是访问路径 @WebServlet(name="DemoServlet3",value="/demoServlet3") public class DemoServlet3 extends HttpServlet { ... } 二.文件上传 表单 method 必须是post enctype="multipart/f