目次
1.脆弱性の紹介
vSphereは、ESXiやvCenter Serverなどの一連のソフトウェアを含む、VMwareが立ち上げた仮想化プラットフォームスイートです。その中でも、vCenter ServerはESXiのコントロールセンターであり、データセンター内のすべてのvSphereホストと仮想マシンを単一のコントロールポイントから均一に管理できます。
2021年2月24日、一部のプラットフォームは、VMwareがvCenter Serverセキュリティアップデートを正式にリリースしたことを検出しました。これにより、vCenter ServerプラグインvRealizeOperations(vROps)のvCenterClient(HTML5)のリモートコード実行の脆弱性(CVE-2021-21972)が修正されます。vSphere Client(HTML5)には、vCenterServerプラグインにリモートでコードが実行される脆弱性があります。不正な攻撃者は、ポート443を開くサーバーを介して、慎重に作成されたリクエストをvCenter Serverに送信し、Webシェルに書き込み、サーバーを制御する可能性があります。
2.影響の範囲
- vmware:vcenter_server7.0バージョン7.0U1cより前
- U3lより前のvmware:vcenter_server6.7バージョン
- U3nより前のvmware:vcenter_server6.5バージョン
3.脆弱性の再発
1.脆弱性環境の構築
環境は非常に複雑なので、ここには誰もいません。https://www.o2oxy.cn/3127.htmlを参照してください (詳細に書かれていますが、インストール中にはまだ多くの問題があります)
起動後の環境は以下のようになります
2.脆弱性の悪用
脆弱性のアドレスは次のとおりです。
https:// ip / ui / vropspluginui / rest / services / updateova
アクセス、405を返す場合は、抜け穴があることを意味します
fofa: title = "+ ID_VC_Welcome +"
4.バグ修正
安全なバージョンにアップグレードする
- vCenter Server7.0バージョンから7.0.U1cにアップグレードします
- vCenter Server6.7バージョンから6.7.U3lにアップグレードします
- vCenter Server6.5から6.5U3nへのアップグレード
V.脆弱性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()
-心、住む場所がなければ、どこにでもさまよう