记一次审计小众cms垂直越权
字数 1153 2025-08-27 12:33:23

Mini CMS v1.1 垂直越权漏洞分析与利用

一、系统概述

Mini CMS 是一个针对个人网站设计的微型内容管理系统,具有以下特点:

  • 不需要数据库支持,只需要PHP运行环境
  • 针对个人网站设计,没有复杂的成员管理和权限设置
  • 使用标签而非分类系统
  • 只有"文章"和"页面"两个基本系统
  • 版本:v1.1

二、漏洞发现

0x01 垂直越权漏洞

漏洞位置

  • mc-admin/index.php - 登录验证逻辑
  • mc-admin/head.php - 权限验证逻辑
  • mc-admin/post.php - 业务逻辑与权限验证分离

漏洞分析

  1. 认证机制分析

    • 登录成功后设置cookie:mc_token = md5(用户名_密码)
    • 权限验证仅检查cookie中的mc_token是否匹配md5(用户名_密码)
  2. 权限验证缺陷

    • post.php文件中权限验证位于第188行
    • 但在权限验证前已经执行了多个功能函数,包括delete_post()
    • 导致未授权用户可以执行删除操作
  3. 关键代码片段

    // mc-admin/index.php 登录验证
    if (isset($_POST['login'])) {
        if ($_POST['user'] == $mc_config['user_name'] && $_POST['pass'] == $mc_config['user_pass']) {
            setcookie('mc_token', md5($mc_config['user_name'].'_'.$mc_config['user_pass']));
            Header("Location:{$mc_config['site_link']}/mc-admin/post.php");
        }
    }
    
    // mc-admin/head.php 权限验证
    if (isset($_COOKIE['mc_token'])) {
        $token = $_COOKIE['mc_token'];
        if ($token != md5($mc_config['user_name'].'_'.$mc_config['user_pass'])) {
            Header("Location:index.php");
            exit;
        }
    } else {
        Header("Location:index.php");
        exit;
    }
    
    // mc-admin/post.php 删除功能
    function delete_post($id) {
        global $state, $index_file, $mc_posts;
        // 删除逻辑...
    }
    
    if (isset($_GET['delete']) || (isset($_GET['apply']) && $_GET['apply'] == 'delete')) {
        // 删除操作执行...
    }
    

漏洞利用

  1. 未授权删除文章

    • 构造Payload直接访问删除功能:
      http://target/mc-admin/post.php?state=delete&delete=文章ID
      
    • 无需任何认证信息即可删除指定ID的文章
  2. 批量删除

    • 构造Payload:
      http://target/mc-admin/post.php?state=delete&apply=delete&ids=ID1,ID2,ID3
      

0x02 后台GetShell漏洞

前提条件

  • 需要管理员权限(能够进入后台)

漏洞位置

  • mc-admin/conf.php - 系统配置保存功能

漏洞分析

  1. 配置保存机制

    • 使用var_export()函数将配置写入mc-conf.php文件
    • 配置项包括站点名称、描述、链接、用户名、密码等
  2. 安全缺陷

    • 虽然单引号会被转义,但可以通过构造特殊Payload实现代码注入
    • 尝试注入PHP代码会被转义函数处理
  3. 关键代码

    $mc_config['comment_code'] = get_magic_quotes_gpc() ? stripslashes(trim($_POST['comment_code'])) : trim($_POST['comment_code']);
    $code = "<?php\n\$mc_config = ".var_export($mc_config, true)."\n?>";
    file_put_contents('../mc-files/mc-conf.php', $code);
    

漏洞利用

  1. 尝试注入

    • 构造Payload:xxx');assert($_GET[x]);/*
    • 但会被var_export()函数转义单引号
  2. 实际利用限制

    • 由于var_export()的安全处理,直接代码注入较难实现
    • 需要寻找其他可利用的点或结合其他漏洞

三、修复建议

  1. 垂直越权修复

    • post.php文件所有功能函数前添加权限验证
    • 使用统一的权限验证机制,避免验证遗漏
  2. 安全增强

    • 对敏感操作增加二次验证
    • 实现CSRF防护机制
    • 对文件写入操作进行更严格的安全检查
  3. 代码结构优化

    • 将权限验证提取为独立函数或类
    • 在入口处统一进行权限验证

四、总结

该Mini CMS v1.1存在严重的垂直越权漏洞,主要由于权限验证与业务逻辑执行顺序不当导致。攻击者无需认证即可执行文章删除等敏感操作。虽然后台GetShell因安全函数处理较难实现,但仍建议开发者加强安全措施,特别是权限验证机制的设计与实现。

Mini CMS v1.1 垂直越权漏洞分析与利用 一、系统概述 Mini CMS 是一个针对个人网站设计的微型内容管理系统,具有以下特点: 不需要数据库支持,只需要PHP运行环境 针对个人网站设计,没有复杂的成员管理和权限设置 使用标签而非分类系统 只有"文章"和"页面"两个基本系统 版本:v1.1 二、漏洞发现 0x01 垂直越权漏洞 漏洞位置 mc-admin/index.php - 登录验证逻辑 mc-admin/head.php - 权限验证逻辑 mc-admin/post.php - 业务逻辑与权限验证分离 漏洞分析 认证机制分析 : 登录成功后设置cookie: mc_token = md5(用户名_密码) 权限验证仅检查cookie中的 mc_token 是否匹配 md5(用户名_密码) 权限验证缺陷 : post.php 文件中权限验证位于第188行 但在权限验证前已经执行了多个功能函数,包括 delete_post() 导致未授权用户可以执行删除操作 关键代码片段 : 漏洞利用 未授权删除文章 : 构造Payload直接访问删除功能: 无需任何认证信息即可删除指定ID的文章 批量删除 : 构造Payload: 0x02 后台GetShell漏洞 前提条件 需要管理员权限(能够进入后台) 漏洞位置 mc-admin/conf.php - 系统配置保存功能 漏洞分析 配置保存机制 : 使用 var_export() 函数将配置写入 mc-conf.php 文件 配置项包括站点名称、描述、链接、用户名、密码等 安全缺陷 : 虽然单引号会被转义,但可以通过构造特殊Payload实现代码注入 尝试注入PHP代码会被转义函数处理 关键代码 : 漏洞利用 尝试注入 : 构造Payload: xxx');assert($_GET[x]);/* 但会被 var_export() 函数转义单引号 实际利用限制 : 由于 var_export() 的安全处理,直接代码注入较难实现 需要寻找其他可利用的点或结合其他漏洞 三、修复建议 垂直越权修复 : 在 post.php 文件所有功能函数前添加权限验证 使用统一的权限验证机制,避免验证遗漏 安全增强 : 对敏感操作增加二次验证 实现CSRF防护机制 对文件写入操作进行更严格的安全检查 代码结构优化 : 将权限验证提取为独立函数或类 在入口处统一进行权限验证 四、总结 该Mini CMS v1.1存在严重的垂直越权漏洞,主要由于权限验证与业务逻辑执行顺序不当导致。攻击者无需认证即可执行文章删除等敏感操作。虽然后台GetShell因安全函数处理较难实现,但仍建议开发者加强安全措施,特别是权限验证机制的设计与实现。