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