目录
一. 漏洞介绍
vSphere 是 VMware 推出的虚拟化平台套件,包含 ESXi、vCenter Server 等一系列的软件。其中 vCenter Server 为 ESXi 的控制中心,可从单一控制点统一管理数据中心的所有 vSphere 主机和虚拟机。
2021年02月24日,某些平台监测到 Vmware官方发布了vCenter Server安全更新,修复了vSphereClient (HTML5)在vCenter Server插件vRealizeOperations(vROps)中的一个远程代码执行漏洞(CVE-2021-21972)。vSphere Client(HTML5) 在 vCenter Server 插件中存在一个远程执行代码漏洞。未授权的攻击者可以通过开放 443 端口的服务器向 vCenter Server 发送精心构造的请求,写入webshell,控制服务器。
二. 影响范围
- vmware:vcenter_server 7.0 U1c 之前的 7.0 版本
- vmware:vcenter_server 6.7 U3l 之前的 6.7 版本
- vmware:vcenter_server 6.5 U3n 之前的 6.5 版本
三. 漏洞复现
1. 漏洞环境搭建
由于环境搭建挺复杂,这里没有搭建,可以参考:https://www.o2oxy.cn/3127.html (虽然写的挺详细但是安装的时候还是会出现很多问题)
启动后环境类似如下
FOFA搜索语法: title="+ ID_VC_Welcome +"
2. 漏洞利用
漏洞所在地址为:
https://ip/ui/vropspluginui/rest/services/updateova
访问,如果返回405,则代表存在漏洞
fofa:title="+ ID_VC_Welcome +"
四. 漏洞修复
升级到安全版本
- vCenter Server 7.0 版本升级到 7.0.U1c
- vCenter Server 6.7版本升级到 6.7.U3l
- vCenter Server 6.5版本升级到 6.5 U3n
五. 漏洞POC
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
import argparse
import os
def url():
parser = argparse.ArgumentParser(description='vCenter 6.5-7.0 RCE 漏洞复现(CVE-2021-21972)POC')
parser.add_argument('target_url',type=str,help='The target address,example: https://192.168.140.153:4445')
args = parser.parse_args()
global url
url = args.target_url
if url.startswith('http://') or url.startswith('https://'):
pass
else:
print('[-]Please include http:// or https:// in the URL!!')
os._exit(0)
if url.endswith('/'):
url = url[:-1]
print('[+]author:chenchen')
print("[-]目标地址:",url)
print("[-]正在执行漏洞检测...")
return url
def poc():
headers={
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36',
"Content-Type":"application/x-www-form-urlencoded"
}
url_v = url + '/ui/vropspluginui/rest/services/updateova'
try:
code = requests.get(url=url_v,headers=headers,timeout=4,verify=False).status_code
print('status_code:',code)
if code == 405:
print('[+]漏洞存在')
else:
print('[-]漏洞不存在')
except:
print('[-]发生错误')
if __name__ == '__main__':
url()
poc()
——心,若没有栖息的地方,到哪都是流浪