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