MKCMS代码审计小结
字数 1523 2025-08-25 22:58:34

MKCMS V6.2 代码审计与漏洞分析教学文档

0x00 系统概述

MKCMS 是一款开源影视CMS系统,版本6.2存在多个安全漏洞。本教学文档将详细分析这些漏洞的原理、利用方式及修复建议。

0x01 全局过滤分析

文件路径: /system/library.php

  • 系统使用 addslashes() 对所有输入参数进行转义
  • 注意点:$_SERVER 变量未被过滤,可能存在安全隐患

0x02 验证码重用漏洞

文件路径: /admin/cms_login.php

漏洞原理

  1. 验证码比较逻辑:
if($_SESSION['verifycode'] != $_POST['verifycode']) {
    alert_href('验证码错误','cms_login.php');
}
  1. 验证码仅在 /system/verifycode.php 中赋值
  2. 当验证码错误时,通过JS跳转刷新页面
  3. 使用Burp Suite等工具不解析JS,可绕过验证码刷新机制

漏洞利用

  • 使用Burp Suite截获请求
  • 重复使用同一验证码进行暴力破解
  • 验证码形同虚设

修复建议

  1. 每次验证后无论成功与否都应重置验证码
  2. 增加验证码使用次数限制
  3. 使用更安全的验证码机制

0x03 前台SQL注入漏洞

漏洞1: /ucenter/repass.php

漏洞原理:

$username = stripslashes(trim($_POST['name']));
$email = trim($_POST['email']);
$query = mysql_query("select u_id from mkcms_user where u_name='$username' and u_email='$email'");
  • 全局使用addslashes()转义
  • 但此处使用stripslashes()去除了转义
  • 导致SQL注入漏洞

利用方式:

  • 构造恶意用户名或邮箱参数
  • 使用SQLMap自动化检测:
sqlmap -u "http://target/ucenter/repass.php" --data="name=test&email=test" --level=3

漏洞2: /ucenter/active.php

漏洞原理:

$verify = stripslashes(trim($_GET['verify']));
$query = mysql_query("select u_id from mkcms_user where u_question='$verify'");

SQLMap检测结果:

[INFO] GET parameter 'verify' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable
[INFO] GET parameter 'verify' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable

漏洞3: /ucenter/reg.php

漏洞原理:

$username = stripslashes(trim($_POST['name']));
$query = mysql_query("select u_id from mkcms_user where u_name='$username'");

修复建议

  1. 统一输入过滤机制,避免部分参数去除转义
  2. 使用预处理语句(PDO)替代直接拼接SQL
  3. 对特殊字符进行严格过滤
  4. 最小化数据库操作权限

0x04 任意用户密码找回漏洞

文件路径: /ucenter/repass.php

漏洞原理

  1. 仅验证用户名和邮箱匹配:
$query = mysql_query("select u_id from mkcms_user where u_name='$username' and u_email='$email'");
  1. 验证通过后直接重置密码:
$password = mt_rand(10000, 99999);
$query = mysql_query("update mkcms_user set u_pwd='$password' where u_name='$username'");
  1. 密码范围仅90000种可能(10000-99999)

漏洞利用

  1. 结合验证码重用漏洞
  2. 暴力破解重置后的密码
  3. 可在短时间内枚举所有可能密码

修复建议

  1. 增加密码重置令牌机制
  2. 限制密码重置频率
  3. 使用更复杂的临时密码生成算法
  4. 强制用户在首次登录后修改密码

0x05 备份文件路径可猜解

文件路径: /admin/cms_backup.php

漏洞原理

  1. 备份文件路径固定:
$filename = "../backupdata/" . DATA_NAME . ".sql";
  1. DATA_NAME 默认为 movie
  2. 备份文件可直接访问:/backupdata/movie.sql

漏洞利用

  • 直接访问备份文件下载数据库
  • 可能包含敏感信息如管理员凭证

修复建议

  1. 随机化备份文件名
  2. 限制备份目录访问权限
  3. 增加身份验证机制
  4. 对备份文件进行加密

0x06 前台文件上传漏洞

文件路径: /editor/php/upload_json.php

漏洞原理

  1. 允许上传的文件类型:
$ext_arr = array(
    'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
    'flash' => array('swf', 'flv'),
    'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
    'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2', '7z'),
);
  1. 通过dir参数控制上传类型
  2. 可上传HTML等可能包含XSS的文件

漏洞利用

示例请求:

POST /editor/php/upload_json.php?dir=file HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryni3BwmVzIUwKfSSC

------WebKitFormBoundaryni3BwmVzIUwKfSSC
Content-Disposition: form-data; name="imgFile"; filename="1.jpg.html"
Content-Type: application/octet-stream

11111111
------WebKitFormBoundaryni3BwmVzIUwKfSSC
Content-Disposition: form-data; name="upload"
Send
------WebKitFormBoundaryni3BwmVzIUwKfSSC--

修复建议

  1. 严格限制可上传文件类型
  2. 对上传文件内容进行检查
  3. 存储上传文件时重命名
  4. 设置适当的文件权限

0x07 综合安全建议

  1. 输入验证:

    • 统一输入过滤机制
    • 避免使用stripslashes()去除转义
    • 对特殊字符进行严格过滤
  2. 会话安全:

    • 加强验证码机制
    • 实现CSRF防护
  3. 数据库安全:

    • 使用预处理语句
    • 最小化数据库账户权限
  4. 文件安全:

    • 限制敏感文件访问
    • 加强上传文件验证
  5. 密码安全:

    • 使用强密码策略
    • 实现安全的密码重置机制
  6. 日志与监控:

    • 记录安全相关操作
    • 实现异常行为监控

通过全面修复这些漏洞,可显著提升MKCMS系统的安全性。建议开发者参考OWASP等安全标准进行全面的安全加固。

MKCMS V6.2 代码审计与漏洞分析教学文档 0x00 系统概述 MKCMS 是一款开源影视CMS系统,版本6.2存在多个安全漏洞。本教学文档将详细分析这些漏洞的原理、利用方式及修复建议。 0x01 全局过滤分析 文件路径 : /system/library.php 系统使用 addslashes() 对所有输入参数进行转义 注意点: $_SERVER 变量未被过滤,可能存在安全隐患 0x02 验证码重用漏洞 文件路径 : /admin/cms_login.php 漏洞原理 验证码比较逻辑: 验证码仅在 /system/verifycode.php 中赋值 当验证码错误时,通过JS跳转刷新页面 使用Burp Suite等工具不解析JS,可绕过验证码刷新机制 漏洞利用 使用Burp Suite截获请求 重复使用同一验证码进行暴力破解 验证码形同虚设 修复建议 每次验证后无论成功与否都应重置验证码 增加验证码使用次数限制 使用更安全的验证码机制 0x03 前台SQL注入漏洞 漏洞1: /ucenter/repass.php 漏洞原理 : 全局使用 addslashes() 转义 但此处使用 stripslashes() 去除了转义 导致SQL注入漏洞 利用方式 : 构造恶意用户名或邮箱参数 使用SQLMap自动化检测: 漏洞2: /ucenter/active.php 漏洞原理 : SQLMap检测结果 : 漏洞3: /ucenter/reg.php 漏洞原理 : 修复建议 统一输入过滤机制,避免部分参数去除转义 使用预处理语句(PDO)替代直接拼接SQL 对特殊字符进行严格过滤 最小化数据库操作权限 0x04 任意用户密码找回漏洞 文件路径 : /ucenter/repass.php 漏洞原理 仅验证用户名和邮箱匹配: 验证通过后直接重置密码: 密码范围仅90000种可能(10000-99999) 漏洞利用 结合验证码重用漏洞 暴力破解重置后的密码 可在短时间内枚举所有可能密码 修复建议 增加密码重置令牌机制 限制密码重置频率 使用更复杂的临时密码生成算法 强制用户在首次登录后修改密码 0x05 备份文件路径可猜解 文件路径 : /admin/cms_backup.php 漏洞原理 备份文件路径固定: DATA_NAME 默认为 movie 备份文件可直接访问: /backupdata/movie.sql 漏洞利用 直接访问备份文件下载数据库 可能包含敏感信息如管理员凭证 修复建议 随机化备份文件名 限制备份目录访问权限 增加身份验证机制 对备份文件进行加密 0x06 前台文件上传漏洞 文件路径 : /editor/php/upload_json.php 漏洞原理 允许上传的文件类型: 通过 dir 参数控制上传类型 可上传HTML等可能包含XSS的文件 漏洞利用 示例请求: 修复建议 严格限制可上传文件类型 对上传文件内容进行检查 存储上传文件时重命名 设置适当的文件权限 0x07 综合安全建议 输入验证 : 统一输入过滤机制 避免使用 stripslashes() 去除转义 对特殊字符进行严格过滤 会话安全 : 加强验证码机制 实现CSRF防护 数据库安全 : 使用预处理语句 最小化数据库账户权限 文件安全 : 限制敏感文件访问 加强上传文件验证 密码安全 : 使用强密码策略 实现安全的密码重置机制 日志与监控 : 记录安全相关操作 实现异常行为监控 通过全面修复这些漏洞,可显著提升MKCMS系统的安全性。建议开发者参考OWASP等安全标准进行全面的安全加固。