对SEMCMS再一次审计
字数 984 2025-08-09 19:14:07

SEMCMS 安全审计报告与漏洞分析

前言

本报告基于对SEMCMS系统的安全审计,发现了多个安全漏洞,包括SQL注入等高风险问题。SEMCMS是一个网站内容管理系统,本次审计发现其存在多处安全缺陷,可能被攻击者利用来获取未授权访问或破坏系统。

漏洞详情

SQL注入漏洞1

位置: /Include/web_inc.php

漏洞描述:

  1. 系统使用$_SERVER["REQUEST_URI"]接收用户输入
  2. 输入被传递到web_language_ml()函数中处理
  3. 未对$_SERVER["REQUEST_URI"]的值进行充分过滤

漏洞代码分析:

$web_urls = $_SERVER["REQUEST_URI"];
// 分割后传入web_language_ml函数

利用方式:

  • 使用时间盲注技术进行攻击
  • 注意:$_SERVER["REQUEST_URI"]不会自动解码,空格需要使用其他方式绕过(不能直接使用%20)
  • 注释部分可使用or'绕过

SQL注入漏洞2(后台认证绕过)

位置: 后台认证机制

漏洞描述:

  1. 所有后台文件都包含SEMCMS_Top_include.php
  2. 该文件使用checkuser()函数进行认证
  3. 认证基于cookie值直接拼接到SQL查询中

过滤函数分析:

  1. test_input()函数:
function test_input($data) {
    $data = str_replace("%", "percent", $data);
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data,ENT_QUOTES);
    return $data;
}
  1. verify_str()函数:
function verify_str($str) {
    if(inject_check_sql($str)) {
        exit('Sorry,You do this is wrong! (.-.)');
    }
    return $str;
}
  1. inject_check_sql()函数:
function inject_check_sql($sql_str) {
    return preg_match('/select|insert|=|%|<|between|update|\'|\*|union|into|load_file|outfile/i',$sql_str);
}

绕过方法:
虽然过滤了常见SQL关键词,但可以通过构造特定payload绕过认证:

scuseradmin: fthgb\\
scuserpass: or 1#

这个payload利用了SQL逻辑,构造出'xxx' or 1=1的形式,使认证条件始终为真。

修复建议

  1. 输入验证:

    • 对所有用户输入进行严格验证,包括$_SERVER变量
    • 使用参数化查询或预处理语句替代直接SQL拼接
  2. 认证机制:

    • 实现安全的会话管理
    • 使用强密码哈希(如bcrypt)存储密码
    • 增加多因素认证
  3. 过滤改进:

    • 更新过滤规则,覆盖更多潜在危险字符和SQL操作
    • 对特殊字符进行统一转义处理
  4. 错误处理:

    • 避免显示详细错误信息给用户
    • 实现自定义错误页面

总结

SEMCMS系统存在多处安全漏洞,特别是SQL注入问题较为严重。攻击者可能利用这些漏洞获取未授权访问、窃取数据或破坏系统。建议开发者参考本报告及时修复这些问题,并定期进行安全审计以确保系统安全。

: 本报告仅分析了部分已发现的漏洞,建议对系统进行全面审计以发现其他潜在安全问题。

SEMCMS 安全审计报告与漏洞分析 前言 本报告基于对SEMCMS系统的安全审计,发现了多个安全漏洞,包括SQL注入等高风险问题。SEMCMS是一个网站内容管理系统,本次审计发现其存在多处安全缺陷,可能被攻击者利用来获取未授权访问或破坏系统。 漏洞详情 SQL注入漏洞1 位置 : /Include/web_inc.php 漏洞描述 : 系统使用 $_SERVER["REQUEST_URI"] 接收用户输入 输入被传递到 web_language_ml() 函数中处理 未对 $_SERVER["REQUEST_URI"] 的值进行充分过滤 漏洞代码分析 : 利用方式 : 使用时间盲注技术进行攻击 注意: $_SERVER["REQUEST_URI"] 不会自动解码,空格需要使用其他方式绕过(不能直接使用%20) 注释部分可使用 or' 绕过 SQL注入漏洞2(后台认证绕过) 位置 : 后台认证机制 漏洞描述 : 所有后台文件都包含 SEMCMS_Top_include.php 该文件使用 checkuser() 函数进行认证 认证基于cookie值直接拼接到SQL查询中 过滤函数分析 : test_input() 函数: verify_str() 函数: inject_check_sql() 函数: 绕过方法 : 虽然过滤了常见SQL关键词,但可以通过构造特定payload绕过认证: 这个payload利用了SQL逻辑,构造出 'xxx' or 1=1 的形式,使认证条件始终为真。 修复建议 输入验证 : 对所有用户输入进行严格验证,包括 $_SERVER 变量 使用参数化查询或预处理语句替代直接SQL拼接 认证机制 : 实现安全的会话管理 使用强密码哈希(如bcrypt)存储密码 增加多因素认证 过滤改进 : 更新过滤规则,覆盖更多潜在危险字符和SQL操作 对特殊字符进行统一转义处理 错误处理 : 避免显示详细错误信息给用户 实现自定义错误页面 总结 SEMCMS系统存在多处安全漏洞,特别是SQL注入问题较为严重。攻击者可能利用这些漏洞获取未授权访问、窃取数据或破坏系统。建议开发者参考本报告及时修复这些问题,并定期进行安全审计以确保系统安全。 注 : 本报告仅分析了部分已发现的漏洞,建议对系统进行全面审计以发现其他潜在安全问题。