海康威视ISC认证绕过分析
字数 1243 2025-08-24 10:10:13

海康威视ISC认证绕过分析教学文档

1. 认证机制概述

海康威视ISC系统的认证机制基于Spring框架实现,主要通过以下关键组件:

  1. 认证过滤器:位于请求处理链中,负责拦截和验证请求
  2. 忽略规则配置:在cas-client.properties文件中定义
  3. URL路径处理:通过Spring的UrlPathHelper等组件处理

2. 关键配置文件分析

每个模块的cas-client.properties文件中包含以下重要配置:

# 不拦截的地址,支持正则表达式
cas.ignore.pattern = /login,*.html,*.eot,*.woff,*.ttf,*.svg,*.gif,*.css,*.js,*.json,/casLogin,*.ico,*.icon,*.png,*.map,/api/meta/qrcode,/api/session,/api/session/captcha,/api/locales,/api/meta,/api/menus,...

忽略规则特点:

  • 使用逗号分隔多个模式
  • 支持通配符(如*.css
  • 支持完整路径匹配(如/login
  • 采用全字符正则匹配,匹配规则严格

3. 认证绕过原理

3.1 认证流程

  1. 请求进入应用
  2. 经过认证过滤器
  3. 调用isRequestUrlExcluded()函数检查URL是否在忽略列表中
  4. 如果匹配忽略规则则放行,否则跳转CAS认证

3.2 关键函数

  • isRequestUrlExcluded():决定是否绕过认证的核心函数
  • getRequestUrl():获取并处理请求URL
  • getResource():处理资源请求

4. 认证绕过技术

4.1 利用路径处理特性绕过

方法一:..;/绕过

构造示例

https://xx.xx.xxx.x/portal/ui/login/front/common/getToken

绕过原理

  1. 利用/ui/login在忽略列表中的特性
  2. Spring的UrlPathHelper会处理;字符
  3. 认证阶段看到的是忽略路径,实际处理时被解析为正常路径

方法二:后缀绕过

构造示例

https://xx.xx.xxx.x/portal/front/common/getToken;.css

绕过原理

  1. 利用*.css在忽略列表中的特性
  2. 认证阶段匹配.css后缀被放行
  3. 实际处理时后缀被忽略或去除

4.2 技术细节分析

URL处理流程差异:

  1. 认证阶段

    • 严格匹配完整URL
    • 不进行路径标准化处理
  2. 实际处理阶段

    • Spring会进行路径标准化
    • 特殊字符(如;)被处理
    • 路径解析与实际资源/接口映射分离

关键处理函数行为:

  • UrlPathHelper.resolveAndCacheLookupPath():去除;等特殊字符
  • DispatcherServlet.doDispatch():获取正确的接口映射处理器

5. 防御建议

  1. 统一路径处理

    • 认证阶段与实际处理阶段使用相同的路径处理逻辑
    • 避免因处理差异导致的认证绕过
  2. 忽略规则优化

    • 避免使用过于宽松的通配符
    • 对静态资源使用固定前缀(如/static/
  3. 安全过滤

    • 过滤URL中的特殊字符(;, ..等)
    • 实施严格的路径标准化
  4. 权限验证

    • 即使绕过认证,也应进行细粒度的权限验证

6. 验证脚本示例

import re

def check_bypass(url_pattern, bypass_attempt):
    """
    验证绕过可能性
    :param url_pattern: 忽略规则中的模式
    :param bypass_attempt: 尝试绕过的URL
    :return: 是否匹配忽略规则
    """
    # 将忽略规则转换为正则表达式
    pattern = url_pattern.replace('.', '\.').replace('*', '.*')
    if not pattern.startswith('^'):
        pattern = '^' + pattern
    if not pattern.endswith('$'):
        pattern = pattern + '$'
    
    # 全字符匹配
    return re.match(pattern, bypass_attempt) is not None

# 示例验证
print(check_bypass("*.css", "/api/test;.css"))  # 返回True表示可绕过

7. 总结

海康威视ISC系统的认证绕过漏洞主要源于:

  1. 认证阶段与实际处理阶段的URL处理不一致
  2. 忽略规则使用宽松的正则匹配
  3. 对特殊字符处理不严格

通过构造特定的URL路径,攻击者可利用系统对URL解析的差异绕过认证机制。防御此类漏洞需要确保系统各阶段对请求的处理保持一致,并实施严格的输入验证。

海康威视ISC认证绕过分析教学文档 1. 认证机制概述 海康威视ISC系统的认证机制基于Spring框架实现,主要通过以下关键组件: 认证过滤器 :位于请求处理链中,负责拦截和验证请求 忽略规则配置 :在 cas-client.properties 文件中定义 URL路径处理 :通过Spring的 UrlPathHelper 等组件处理 2. 关键配置文件分析 每个模块的 cas-client.properties 文件中包含以下重要配置: 忽略规则特点: 使用逗号分隔多个模式 支持通配符(如 *.css ) 支持完整路径匹配(如 /login ) 采用 全字符正则匹配 ,匹配规则严格 3. 认证绕过原理 3.1 认证流程 请求进入应用 经过认证过滤器 调用 isRequestUrlExcluded() 函数检查URL是否在忽略列表中 如果匹配忽略规则则放行,否则跳转CAS认证 3.2 关键函数 isRequestUrlExcluded() :决定是否绕过认证的核心函数 getRequestUrl() :获取并处理请求URL getResource() :处理资源请求 4. 认证绕过技术 4.1 利用路径处理特性绕过 方法一: ..;/ 绕过 构造示例 : 绕过原理 : 利用 /ui/login 在忽略列表中的特性 Spring的 UrlPathHelper 会处理 ; 字符 认证阶段看到的是忽略路径,实际处理时被解析为正常路径 方法二:后缀绕过 构造示例 : 绕过原理 : 利用 *.css 在忽略列表中的特性 认证阶段匹配 .css 后缀被放行 实际处理时后缀被忽略或去除 4.2 技术细节分析 URL处理流程差异: 认证阶段 : 严格匹配完整URL 不进行路径标准化处理 实际处理阶段 : Spring会进行路径标准化 特殊字符(如 ; )被处理 路径解析与实际资源/接口映射分离 关键处理函数行为: UrlPathHelper.resolveAndCacheLookupPath() :去除 ; 等特殊字符 DispatcherServlet.doDispatch() :获取正确的接口映射处理器 5. 防御建议 统一路径处理 : 认证阶段与实际处理阶段使用相同的路径处理逻辑 避免因处理差异导致的认证绕过 忽略规则优化 : 避免使用过于宽松的通配符 对静态资源使用固定前缀(如 /static/ ) 安全过滤 : 过滤URL中的特殊字符( ; , .. 等) 实施严格的路径标准化 权限验证 : 即使绕过认证,也应进行细粒度的权限验证 6. 验证脚本示例 7. 总结 海康威视ISC系统的认证绕过漏洞主要源于: 认证阶段与实际处理阶段的URL处理不一致 忽略规则使用宽松的正则匹配 对特殊字符处理不严格 通过构造特定的URL路径,攻击者可利用系统对URL解析的差异绕过认证机制。防御此类漏洞需要确保系统各阶段对请求的处理保持一致,并实施严格的输入验证。