HisiCms代码审计

本文详细分析了HisiCms的代码安全问题,包括Cms安装过程中可能出现的Getshell漏洞,以及由于缺乏有效过滤导致的任意文件上传漏洞。在Getshell部分,指出在处理数据库信息时存在风险;在文件上传部分,指出了通过POST数据操控配置文件并利用目录跨越漏洞的可能性。
摘要由CSDN通过智能技术生成

Cms安装处Getshell

我们首先看cms安装代码,比较容易出现问题的一般是执行安装时获取数据库信息环节

  private function step4()
    {
        if ($this->request->isPost()) {
            if (!is_writable($this->root_path.'config/database.php')) {
                return $this->error('[config/database.php]无读写权限!');
            }
            $data = $this->request->post();
            $data['type'] = 'mysql';
            $rule = [
                'hostname|服务器地址' => 'require',
                'hostport|数据库端口' => 'require|number',
                'database|数据库名称' => 'require',
                'username|数据库账号' => 'require',
                'prefix|数据库前缀' => 'require|regex:^[a-z0-9]{1,20}[_]{1}',
                'cover|覆盖数据库' => 'require|in:0,1',
            ];
            $validate = $this->validate($data, $rule);

第9行获取了POST()数据,我们看下具体

 public function post($name = '', $default = null, $filter = '')
    {
        if (empty($this->post)) {
        $this->post = !empty($_POST) ? $_POST : $this->getInputData($this->input);
        }
        return $this->input($this->post, $name, $default, $filter);
    }

判断是否为空,然后利用三元运算符返回了POST()的的值。目前到这里是没有做过滤的我们继续往下看

              $validate = $this->validate($data, $rule);
    if (true !== $validate) {
        return $this->error($validate);
    }
    $cover = $data['cover'];
    unset($data['cover']);
    $config = include $this->root_path.'config/database.php';
    foreach ($data as $k => $v) {
        if (array_key_exists($k, $config) === false) {
            return $this->error('参数'.$k.'不存在!');
        }
    }
    // 不存在的数据库会导致连接失败
    $database = $data['database'];
    unset($data['database']);
    // 创建数据库连接
    $db_connect = Db::connect($data);

在最后一行,142行,没有对$data进行处理,然后写入了database.php
于是
在这里插入图片描述

查看配置文件
在这里插入图片描述

任意文件上传漏洞

有时候黑盒比白盒效率高一些
在这里插入图片描述

我们看下源码

    public function index($group = 'base')
    {
        if ($this->request->isPost()) {
            $webPath = './';
            $data = $this->request->post();
            $types = $data['type'];
            if (isset($data['id'])) {
                $ids = $data['id'];
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值