学习打卡——cms文章

郎贤坤   ·   发表于 2022-06-27 22:05:21   ·   学习杂记

#### 1.迅睿CMS v4.3.3到v4.5.1后台任意代码注入漏洞

cache\config目录下Cron.php内add()函数对于用户的输入没有进行专门的过滤,致使攻击者在具备管理员权限或具有”应用”->”任务队列”的管理权限时可以对WRITEPATH.’config/cron.php’文件写入任意内容,同时该文件有多处被包含且可以被利用的点,正常情况下具有上述的触发条件即可稳定触发该漏洞

条件

1.迅睿CMS 版本为v4.3.3到v4.5.1
2.登录后台,且为管理员或具有”应用”->”任务队列”的管理权限

1.访问后台地址登录管理员(默认账号密码是admin)" class="reference-link">1.访问后台地址登录管理员(默认账号密码是admin)

2.访问漏洞地址 http://127.0.0.1/admin.php?c=Cron&m=add " class="reference-link">2.访问漏洞地址http://127.0.0.1/admin.php?c=Cron&m=add


用Seay定位cron下的add()函数

  // 任务类型
    public function add() {
        $json = '';
        if (is_file(WRITEPATH.'config/cron.php')) {
            require WRITEPATH.'config/cron.php';
        }
        $data = json_decode($json, true);

        if (IS_AJAX_POST) {
            $post = \Phpcmf\Service::L('input')->post('data', true);

            file_put_contents(WRITEPATH.'config/cron.php',
                'system_log('设置自定义任务类型');

            $this->_json(1, dr_lang('操作成功'));
        }
        \Phpcmf\Service::V()->assign([
            'data' => $data,
        ]);
        \Phpcmf\Service::V()->display('cron_add.html');
    }

(1)add()函数会在WRITEPATH.’config/cron.php’文件存在时包含该文件,然后通过json_decode($json, true)函数给$data赋值Null

(2)然后进入一个if分支语句,当IS_AJAX_POST时,则执行相关的写入文件的代码,否则则跳过写入文件,显示Cron的添加页面,随即结束add()函数,IS_AJAX_POST定义为当收到post请求且post的内容不为空时即返回TRUE,否则返回FALSE

(3)if语句中,首先\Phpcmf\Service::L(‘input’)->post(‘data’, true)该代码通过调用Input.php文件里定义的Input类的post()函数,在接收到post请求且存在key为data时进行xss过滤然后返回,否则直接返回false,然后赋值给$post

(4)if语句中,接收完post请求,即将接收到的内容通过json编码后写入WRITEPATH.’config/cron.php’文件,可控的写入点位于字符串$json的赋值中,且在两个’的包裹中,此处是漏洞产生的主要原因,未对用户的输入做足够的判断或清洗即写入相应的文件
在/Admin.php?c=Cron&m=add页面不添加内容直接点击保存时生成的cron.php

3.绕过绕过json编码和xss过滤以及WRITEPATH.’config/cron.php’文件中的单引号" class="reference-link">3.绕过绕过json编码和xss过滤以及WRITEPATH.’config/cron.php’文件中的单引号

(1)把会被检测到的字符或字符组合,通过各种编码进行绕过
比如’));return;’%5D)
放包后会在cache\config处生成一个cron.php

(4)绕过json编码和xss过滤后,写入WRITEPATH.’config/cron.php’文件中的内容为:

'));return;']"}}';

(5)访问http://host:port/Admin.php?c=Cron&m=add后,在网站根目录下会生成一个名为webshell.php的文件,文件内容为```php

```

打赏我,让我更有动力~

0 条回复   |  直到 2022-6-27 | 554 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.