船说 CMS 漏洞怎么修补
学完这篇,你能把船说 CMS 的已知漏洞从「发现—升级—临时加固—被入侵后排查」走完一整套流程,不用停机重装也能把风险压下去。
第一步:先搞清你中的是哪一类漏洞、当前是哪个版本
这一步的目标是拿到两个信息:版本号 + 漏洞类型。版本号在后台首页右侧或「系统设置 → 系统信息」里能看到,也可以直接看服务器上的 /app/common.php 或 /data/version.php 里的版本常量。漏洞类型则对照官方更新公告、CNVD/CNNVD 的编号确认——船说 CMS 历史上公开的问题集中在后台任意文件上传、SQL 注入、模板文件包含、install 目录未删这几类,不同类型修法不一样,别一股脑全改。
注意:先备份再动手。数据库用
mysqldump -u root -p 库名 > bak.sql,网站目录用tar czf site_bak.tar.gz /www/wwwroot/你的站点,备份文件放在 web 目录之外。
第二步:优先升级到官方最新补丁版(根治手段)
这一步做完,大部分已公开漏洞就直接消失了。去船说 CMS 官方渠道下载最新完整包或补丁包,解压后:
- 只覆盖
/app、/core、/public/static这类程序目录; - 不要覆盖
/config/database.php、/config/config.php、/uploads; - 删除
/runtime下的全部缓存(rm -rf runtime/*); - 如果根目录还有
install/或install.php,立刻删除或改名。
升级完登录后台,确认「系统信息」里的版本号已经变了,页面能正常打开。
注意:有些老站点改过核心文件,直接覆盖会导致白屏。升级前先用
diff对比一下被改过的文件,或先在测试环境跑一遍。
第三步:升不了级?先做临时加固
有些老项目代码被改得面目全非,升级风险大,这时候做三件事:
改后台入口:把根目录的 admin.php(部分版本是 admin/index.php)改名成一串随机字符,例如 my8f3k2x.php。攻击者扫不到入口,自动化工具直接失效。
加固账号:后台「管理员管理」里,删掉所有非本人账号,密码改成 16 位以上大小写+符号组合,并给管理员登录加 IP 白名单(宝塔面板:网站 → 设置 → 网站目录 → 访问限制,或 Nginx 的 allow/deny)。
封住上传点:船说 CMS 的上传目录通常是 /uploads、/uploadfile、/public/uploads,检查这几个目录下有没有 .php 文件,有就说明可能已经中招。
第四步:给上传目录和模板目录禁止执行 PHP(最关键的落地措施)
漏洞利用链的最后一环几乎都要落到「上传的文件被执行」,掐断这一步收益最大。
Nginx 站点配置文件里加:
location ~* ^/(uploads|uploadfile|public/uploads|runtime)/.*\.(php|php5|phtml|pht)$ {
deny all;
}
location ~* ^/(template|themes)/.*\.(php|php5|phtml)$ {
deny all;
}
Apache 则在对应目录放 .htaccess:
<FilesMatch "\.(php|php5|phtml)$">
Require all denied
</FilesMatch>
改完 nginx -t && nginx -s reload,然后随便传个 .php 测试文件上去访问,返回 403 才算成功。
注意:目录权限也一起改,上传目录设 755、文件 644,属主设成 web 运行用户(一般是
www),别给 777。
第五步:PHP 与服务器层收口
在 PHP 配置文件(宝塔:软件商店 → PHP → 设置 → 配置修改)里调整:
open_basedir限制到站点目录,防止跨目录读文件;disable_functions加上exec,passthru,shell_exec,system,proc_open,popen,assert;display_errors = Off,log_errors = On。
注意:某些插件依赖
curl、file_get_contents,禁用函数前先在测试环境确认不会导致功能报错。
第六步:判断是否已被入侵
补漏洞不等于清后门。SSH 里跑一遍:
find /www/wwwroot/站点 -name "*.php" -mtime -30 -ls
列出近 30 天被修改的 PHP 文件,重点看上传目录和 /public。再用 grep -rn "eval\|base64_decode\|assert(" --include=*.php /www/wwwroot/站点 搜可疑代码。同时检查后台管理员列表、数据库 user 表、以及 crontab -l 有没有陌生定时任务。
注意:发现 webshell 先别急着删,先记录文件名、时间、内容再清理,方便判断入侵时间点,也便于跟服务商沟通。
小结
- 先确认版本和漏洞类型,动手前一定备份数据库和站点。
- 能升级就升级到官方最新补丁版,覆盖时保留配置文件并清
runtime缓存。 - 升不了就改后台入口名、加强密码、加 IP 白名单。
- 上传目录、模板目录一律禁止执行 PHP,这是性价比最高的一步。
- 漏洞补完必须做入侵排查,重点看近期被改的 PHP 文件和管理员表。
原文链接:https://www.gj0.com/thread-956.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。