一、环境信息
- 程序版本:MCMS 6.2.0(当前最新正式版)
- 触发漏洞:Mdiy 自定义表单模块
/mdiy/form/data/listSQL 注入(非老旧版本 arclist/category/list 漏洞) - 关键风险放大器:
allowMultiQueries=true(JDBC 连接串开启多语句执行能力) - 攻击来源 IP:43.172.52.121
核心重点:MCMS 6.2.0 已修复官方公开的主程序 SQL 注入漏洞,但 Mdiy 自定义表单这类附加组件存在独立未修复的注入漏洞。
allowMultiQueries=true 本身不属于漏洞,但会将普通只读 SQL 注入放大为可堆叠执行任意SQL语句的高危利用链路,是本次服务器被完全攻陷的核心必要条件。二、完整攻击链路(日志完整还原)
1. 触发SQL注入,开启堆叠执行条件
攻击者访问漏洞接口:
GET /mdiy/form/data/list,构造带分号 ; 的恶意 Payload。依托 JDBC 配置 allowMultiQueries=true,突破单条SQL执行限制,实现多语句堆叠执行。2. 绕过业务层,伪造后台管理员账号
攻击者通过堆叠 SQL 中的
REPLACE 语句,直接操作数据库 manager 管理员表,强行插入合法后台账号,全程绕过 MCMS 所有 Java 业务校验逻辑:- 伪造账号ID:9998
- 伪造用户名:super
- 账号密码逻辑:攻击者本地预先计算明文密码
ctf405311的 MD5 哈希值,直接将密文写入数据库manager_password字段,绕过系统密码加密、注册校验、权限校验等所有业务规则。
3. 利用伪造账号正常登录后台
调用
/code.do 获取登录验证码,通过 /ms/shturl.c 接口,使用伪造账号 super/ctf405311 正常登录 MCMS 后台,获得完整管理员权限。4. 调用合法后台接口上传WebShell木马
攻击者凭借合法管理员身份,调用系统原生合法接口
/ms/store/share/uploadTemplate.do(仅管理员可访问,无代码漏洞),上传 JSP 格式网页木马。5. 执行木马,完全接管服务器权限
木马成功上传至服务器
template/JX1786405314.jsp,访问该文件返回 200 状态码,攻击者通过 WebShell 获取服务器系统命令执行权限,服务器彻底沦陷。关键阻断逻辑:若关闭
allowMultiQueries=true,即便 Mdiy 接口存在 SQL 注入漏洞,分号后的新增账号 SQL 语句无法执行,攻击者无法伪造管理员账号,后续登录、传马、控服的整套攻击链路会直接中断,漏洞仅能实现数据查询,无高危接管风险。三、风险点清单
- Mdiy 自定义表单附加组件存在 SQL 注入漏洞,组件补丁更新滞后于主程序,最新版主程序无法覆盖修复;
- JDBC 连接串开启
allowMultiQueries=true,成为漏洞放大核心条件,大幅提升入侵危害等级; - 后台
/ms/*、表单组件/mdiy/*接口全网开放,无 IP 白名单限制,攻击面完全暴露; - 若 MCMS 使用 MySQL root 账号连接数据库,自带 FILE 高危权限,可直接通过 SQL 写入服务器文件;
- 网站上传、模板目录支持 JSP 脚本执行,为木马运行提供环境;
- 入侵后存在持久化后门风险:残留 JSP/JSPX 木马、SSH 公钥后门、定时任务恶意脚本。
四、紧急处置步骤(按执行顺序)
1. 关闭JDBC多语句执行(核心必做)
修改项目
application-prod.yml 配置文件,彻底删除 JDBC 连接串中的allowMultiQueries=true,杜绝 SQL 堆叠执行风险。修改后标准配置示例:
url: jdbc:mysql://127.0.0.1:3306/mcms?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai配置修改完成后,重启 MCMS 服务,确保配置生效。
2. 清理数据库恶意伪造账号
登录 MySQL,进入 MCMS 业务数据库,执行SQL清理后门账号并巡检全部管理员:
-- 删除攻击者伪造的管理员账号
delete from manager where id=9998;
-- 巡检全部后台管理员,排查其他伪造账号
select id,manager_name,manager_nickname,manager_password,DEL,MANAGER_LOCK from manager;3. 全盘查杀WebShell木马
进入项目目录,执行命令筛查所有可疑脚本文件,清理入侵残留木马:
# 查找项目下所有jsp、jspx脚本文件
find ./ -type f -name "*.jsp" -o -name "*.jspx"
# 精准筛查24小时内新增/修改的木马文件(重点排查)
find ./ -mtime -1 -type f \( -name "*.jsp" -o -name "*.jspx" \)
# 删除本次已知恶意木马文件
rm -f ./template/JX1786405314.jsp4. Nginx配置后台接口IP白名单
业务无需 Mdiy 表单则直接拦截全部
/mdiy/* 接口,后台 /ms/* 仅放行自有公网IP,禁止外网访问:location ~ ^/(ms|mdiy)/ {
allow 你的公网IP;
deny all;
}配置完成后重载 Nginx 生效:
nginx -s reload5. 收紧MySQL数据库权限
禁止使用 MySQL root 账号对接业务,创建专属低权限业务账号,并回收高危 FILE 权限:
-- 回收数据库文件写入高危权限
REVOKE FILE ON *.* FROM '你的cms业务账号'@'localhost';
FLUSH PRIVILEGES;6. 排查服务器持久化后门(关键收尾)
# 查看root用户定时任务,排查恶意定时脚本
crontab -l
# 巡检系统全局定时任务目录
ls -la /etc/cron.*
# 排查SSH公钥后门,清空陌生密钥
cat /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
# 筛查系统所有可登录账号,仅保留root、lighthouse为正常账号
grep -vE '/sbin/nologin|/bin/false' /etc/passwd
# 排查是否存在非法cms系统用户
id cms五、长期安全加固方案
- Mdiy自定义表单组件:无业务需求则通过Nginx永久拦截,彻底消除攻击面;刚需使用则持续跟进官方安全补丁,定期更新组件版本。
- 生产环境强制规范:所有项目JDBC连接串永久禁止配置allowMultiQueries=true,作为全局安全兜底策略。
- 后台接口强制白名单:
/ms/*后台管理接口不对外网开放,仅信任自有固定IP访问。 - 数据库权限最小化:业务统一使用低权限专属账号,禁用root账号对接项目,永久回收FILE权限。
- 常态化安全巡检:定期扫描项目目录下JSP、JSPX脚本文件,监控上传、模板目录文件变动。
- 版本更新规范:MCMS升级仅替换jar包后,必须人工核对yml配置文件,避免遗留高危旧配置。
六、核心认知总结
allowMultiQueries=true是高危风险放大器而非原生漏洞,关闭后即便出现SQL注入,也无法堆叠SQL新增账号、写入文件,入侵危害从“服务器沦陷”降级为“仅数据查询”。- 堆叠SQL注入可完全绕过应用层密码加密、注册校验等业务逻辑,直接操作数据库写入合法管理员密文,属于底层高危攻击手段。
- 本次攻击未利用后台漏洞,而是通过伪造合法管理员账号,调用系统正常上传接口,属于权限前置劫持攻击。
- MCMS附加组件安全更新滞后于主程序,最新版主程序无法覆盖第三方组件漏洞,存在独立攻击面。
- 入侵修复不能仅补代码漏洞,必须完整查杀木马、清理后门、收紧权限,否则攻击者可通过持久化后门再次入侵。
