船说 CMS 源码是否存在漏洞

chinaz
chinaz 初级会员超兽战士
发布于 2026-10-08 12:22 ·2 浏览 ·0 回复

学完这篇,你能自己判断一套船说 CMS 源码到底有没有漏洞,而不是听别人一句「这系统不安全」就慌,也能知道发现可疑点后该先做什么、后做什么。

第一步:先确认你手上的是哪个版本

这一步要拿到一个准确的版本号,因为「船说 CMS 有没有漏洞」这个问题本身是无效的——同一个系统,v1.0 和 v3.2 的安全性可能一个天一个地。

三个地方能查到版本:

  1. 后台登录后,鼠标移到右上角管理员头像,下拉菜单里点「关于系统」,弹窗第一行就是版本号和编译日期。
  2. 源码根目录找 version.php 或 include/config.inc.php,里面通常有 $cfg_version 之类的变量。
  3. 打开官方更新日志页面,看最新一版发布日期。

注意:如果这三个地方的版本号对不上,比如后台显示 2.1 而 version.php 写着 2.0,说明这套源码被人改过,后面所有排查都要按「未知代码」对待。

第二步:用公开渠道核对已知问题

这一步的目标是列出「这个版本已知被修过什么」,得到一个待验证清单。

具体做法:

  • 打开 CNVD(国家信息安全漏洞共享平台)官网,搜索框输入「船说」,看收录条目里的影响版本字段。
  • 到 GitHub 上找该项目的 issue 区,按关键词「安全」「XSS」「注入」筛。
  • 国内的 Seebug 漏洞库同样按产品名检索。

把命中你版本的条目抄下来,每条记下:漏洞类型、触发路径、修复版本。

注意:搜到的「利用工具」「一键 getshell 脚本」一律不要下载运行。你只需要知道「哪个文件、哪类问题」,验证用自己的代码去证,不要拿别人的脚本打自己的站,更不要打别人的站——那是违法的。

第三步:本地静态排查高危代码点

这一步做完,你手头会有一份「可疑文件清单」。CMS 类 PHP 项目的高危区就那么几块,用命令筛最快。

在源码根目录执行:


grep -rn --include=*.php -E "eval\(|assert\(|system\(|exec\(|shell_exec\(|popen\(" .

# 未过滤的输入
grep -rn --include=*.php -E '\$_(GET|POST|REQUEST|COOKIE)' . | grep -iE "query|select|insert|update|delete"

# 上传处理
grep -rn --include=*.php -E "move_uploaded_file|\\\$_FILES" .

然后重点看这几类文件:

  • install/ 目录还在不在。CMS 装完后安装程序没删,等于留了一把能重装数据库的钥匙。
  • 上传接口里,有没有对扩展名做白名单校验(只允许 jpg/png/gif),而不是黑名单(禁止 php)。
  • 后台里带 ?file=、?path=、?url= 的页面,看有没有 ../ 过滤。

想省事可以直接上工具:PHPStan 做类型与危险调用扫描,或者 Semgrep 加载 php 规则集跑一遍。命令:

semgrep --config=p/php .

注意:这类工具报的是「可疑」,不是「有漏洞」,误报率不低,必须进到下一步人工确认。

第四步:在本地环境实打实验证

这一步得到的是确定结论。注意验证只在自己机器上做。

用 Docker 起一个干净的测试环境:

docker run -d --name cs-test -p 8080:80 \
  -v /你的源码路径:/var/www/html php:7.4-apache

浏览器打开 http://127.0.0.1:8080/install/,完整走一遍安装流程。然后针对第三步筛出的可疑点,逐个测试:上传一个后缀改名的 .php.jpg 看能不能解析、在搜索框输入 ' 看报不报数据库错误。

发现能复现的,截图存证,记下文件路径和参数。

第五步:加固和修复

不管有没有测出漏洞,下面这几条都该做,做完能挡掉绝大多数老问题:

  1. 删除 install/ 整个目录。
  2. 后台入口文件 admin.php 改名为不易猜的名字,比如 manage_x9k2.php。
  3. 上传目录禁止执行 PHP。Nginx 配置里加:
   location ~* ^/uploads/.*\.(php|php5|phtml)$ { deny all; }
   
  1. 目录权限收紧:find . -type d -exec chmod 755 {} \;,文件 644,只有缓存和上传目录给写权限。
  2. 官方已发布修复版本的,直接覆盖升级,别手改。

小结

  • 判断漏洞的第一步永远是锁定版本号,没有版本就没有结论。
  • 已知问题查 CNVD、GitHub issue、Seebug,只取信息不取工具。
  • 静态扫描用 grep 加 Semgrep,重点盯动态执行函数、未过滤输入、上传接口、残留 install 目录。
  • 验证必须在本地 Docker 环境做,复现结果才算数。
  • 无论测出什么都做加固:删安装目录、改后台路径、禁上传目录执行、收紧权限。
  • 源码被二次改过的系统,按未知代码处理,优先级最高的是先恢复成官方原版。
版权声明:本文来自 GJ站长论坛《船说 CMS 源码是否存在漏洞》
原文链接:https://www.gj0.com/thread-949.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~