
Suite completa de ataque de credenciales para pruebas de seguridad autorizadas — SSH, FTP, Inicio de sesión web, Fuerza bruta, Ataques de diccionario
⚠️ AVISO LEGAL — Solo pruebas de seguridad autorizadas.
Usar esta herramienta contra sistemas que no posees o para los que no tienes permiso escrito explícito es ilegal según la Computer Fraud and Abuse Act (EE. UU.), la Computer Misuse Act (Reino Unido) y leyes equivalentes en todo el mundo. Consulta SECURITY.md.
CredAttack es un conjunto de pruebas de credenciales modular y de nivel de producción para compromisos de pruebas de penetración autorizados. Cubre el ciclo de vida completo del ataque de credenciales:
| Fase | Capacidad de CredAttack |
|---|
credattack.py ← shim delgado: `python credattack.py ...` desde un checkout
│
├── credattack/cli.py ← CLI (Typer) — 8 subcomandos de modo de ataque; también el
│ script de consola `credattack` cuando se instala con pip
├── credattack/core/
│ ├── config.py ← Configuraciones Pydantic v2, anulaciones de variables de entorno CREDATTACK_*
│ ├── engine.py ← AttackEngine (ThreadPoolExecutor + interfaz de progreso Rich)
│ ├── lockout.py ← LockoutDetector (ventana deslizante, seguro para subprocesos)
│ ├── proxy.py ← ProxyRotator (round-robin, verificación de salud, degradación)
│ ├── mutator.py ← PasswordMutator (leet, estacional, sufijo, recorrido de teclado…)
│ ├── result.py ← Clases de datos AttemptResult + SessionReport
│ ├── report.py ← Generador de informes HTML Jinja2
│ └── logger.py ← Registro Rich + escritor de auditoría JSONL
│
├── credattack/protocols/
│ └── *.py ← 18 implementaciones de ProtocolAttacker
│
├── credattack/data/
│ ├── default_creds.json ← Más de 200 pares reales de credenciales por defecto
│ ├── smart_patterns.json ← Más de 140 plantillas de contraseñas empresariales
│ └── wordlists/ ← Listas de contraseñas por defecto por servicio
│
└── tests/ ← Más de 50 pruebas pytest (unitarias + mocks de protocolo)
# Clonar y configurar
git clone https://github.com/amibhai/credential-attacks-toolkit.git
cd credential-attacks-toolkit
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# Comprobar versión
python credattack.py --version
# Ejecución de prueba (sin conexiones — verifica tus listas de palabras)
python credattack.py ssh -t 192.168.1.100 -u admin -P wordlists/common_passwords.txt --dry-run
# Ataque de diccionario SSH real
python credattack.py ssh -t 192.168.1.100 -u admin -P /path/to/rockyou.txt
# Spray de contraseñas (con limitación de velocidad, seguro contra bloqueos)
python credattack.py spray -t 192.168.1.100 --protocol ssh -U users.txt -p "Summer2024!" --delay 30
# Modo inteligente — generar patrones a partir del nombre de usuario + empresa
python credattack.py smart -t 192.168.1.100 --protocol ssh -u john.doe --company ACME
# Probar valores por defecto del servicio
python credattack.py defaults -t 192.168.1.100 --protocol mysql
# Campaña multi-objetivo
python credattack.py multi --targets hosts.txt --protocol ssh -U users.txt -P passes.txt
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install --upgrade pip
pip install -r requirements.txt
make install # dependencias principales
make install-dev # + pytest-cov, ruff, mypy
pip install -e . # solo dependencias principales
pip install -e .[full] # + SMB/RDP/MySQL/MSSQL/Redis/MongoDB/WinRM/LDAP
pip install -e .[dev] # + pytest/ruff/mypy
credattack --version # script de consola, equivalente a `python credattack.py`
docker build -t credattack -f docker/Dockerfile .
docker run --rm credattack --help
# Monta tus listas de palabras y recoge la salida
docker run --rm \
-v $(pwd)/wordlists:/app/wordlists:ro \
-v $(pwd)/output:/app/output \
credattack ssh -t 192.168.1.100 -u admin -P wordlists/common_passwords.txt
python credattack.py [OPTIONS] COMMAND [ARGS]...
Options:
-V, --version Muestra la versión y sale.
--help Muestra la ayuda.
# Específicos de protocolo (cada uno se asigna a un atacante dedicado)
python credattack.py ssh|ftp|smb|rdp|smtp|pop3|imap|mysql|mssql|redis|mongodb|winrm|ldap|telnet|vnc \
-t HOST -u USER -P passes.txt
# HTTP (formulario / basic / digest)
python credattack.py http -t http://target/login --mode form \
--form-user-field username --form-pass-field password --success-string "Dashboard"
# Spray — una contraseña, muchos usuarios, retraso largo
python credattack.py spray -t HOST --protocol ssh -U users.txt -p "Password1" --delay 30
# Combo — producto cartesiano usuarios × contraseñas
python credattack.py combo -t HOST --protocol smb -U users.txt -P passes.txt
# Inteligente — generación derivada de OSINT
python credattack.py smart -t HOST --protocol ssh -u firstname.lastname --company TargetCorp
# Por defecto — probar credenciales por defecto del proveedor
python credattack.py defaults -t HOST --protocol mysql
# Multi — mismo ataque contra múltiples hosts
python credattack.py multi --targets hosts.txt --protocol ssh -U users.txt -P passes.txt
# Full — todos los protocolos en secuencia
python credattack.py full -t HOST -U users.txt -P passes.txt
PasswordMutator en credattack/core/mutator.py admite estrategias componibles:
from credattack.core.mutator import PasswordMutator
m = PasswordMutator(max_mutations=5000)
# Todas las estrategias combinadas
for pw in m.smart_generate("john.doe", company="ACME"):
print(pw)
# Solo patrones estacionales
for pw in m.seasonal_patterns(company="Contoso"):
print(pw)
credattack/data/default_creds.json contiene más de 200 pares reales de credenciales por defecto en:
Cisco · F5 · Juniper · Palo Alto · VMware · Jenkins · GitLab · Tomcat · WordPress · MySQL · MSSQL · Redis · MongoDB · PostgreSQL · Elasticsearch · RabbitMQ · Splunk · Nagios · Zabbix · pfSense · MikroTik · Huawei · HP iLO · Dell iDRAC · IPMI
# Ver todos los valores por defecto de un servicio
python credattack.py defaults -t HOST --protocol mysql --dry-run
# Ejecutar contra el objetivo
python credattack.py defaults -t 10.0.0.1 --protocol ssh
Pasa un archivo de proxies (un proxy por línea, formato host:port):
# proxies.txt
192.168.1.10:1080
192.168.1.11:1080
socks5://10.0.0.5:9050
python credattack.py ssh -t TARGET -u admin -P passes.txt --proxy-file proxies.txt
El ProxyRotator realiza verificaciones de salud al inicio y degrada los proxies que superan un umbral de tasa de fallos. Los proxies muertos se excluyen automáticamente.
Tras cada ataque que no sea de prueba se genera automáticamente un informe HTML en ./output/:
# Abrir después de una ejecución
start output/report_*.html # Windows
open output/report_*.html # macOS
Todas las configuraciones en credattack/core/config.py se pueden anular mediante variables de entorno CREDATTACK_*:
export CREDATTACK_THREADS=20
export CREDATTACK_TIMEOUT=3.0
export CREDATTACK_DELAY=1.0
export CREDATTACK_JITTER=0.5
export CREDATTACK_LOCKOUT_THRESHOLD=3
export CREDATTACK_VERBOSITY=2
O a nivel de CLI con las banderas estándar (--threads, --timeout, etc.).
# Construir imagen
docker build -t credattack -f docker/Dockerfile .
# Ejecutar con Docker Compose
cd docker
docker compose run credattack ssh -t 192.168.1.100 -u admin -P /app/wordlists/common_passwords.txt
# Configurar mediante variables de entorno
docker run --rm \
-e CREDATTACK_THREADS=20 \
-e CREDATTACK_TIMEOUT=3 \
-v $(pwd)/output:/app/output \
credattack defaults -t 10.0.0.1 --protocol mysql
# Ejecutar todas las pruebas
pytest -q
# Con cobertura
pytest --cov=credattack --cov-report=term-missing -q
# Atajo de Makefile
make test-cov
Conjunto actual: más de 50 pruebas que cubren:
⚠️ Los archivos
wordlists/incluidos son stubs mínimos de prueba de humo. Proporciona los tuyos para evaluaciones reales.
# Usar cualquier lista de palabras externa
python credattack.py ssh -t TARGET -u admin -P /opt/wordlists/rockyou.txt
credential-attacks-toolkit/
├── credattack.py # Shim delgado -> credattack.cli:app (uso desde checkout de fuente)
├── pyproject.toml # Configuración de compilación y herramientas PEP 517/518
├── requirements.txt # Dependencias de ejecución
├── Makefile # Atajos para desarrolladores
├── VERSION # Fuente única de verdad de versión
├── CHANGELOG.md
├── SECURITY.md
├── .github/
│ └── workflows/ci.yml # GitHub Actions: lint + matriz de pruebas + mypy
├── docker/
│ ├── Dockerfile
│ └── docker-compose.yml
├── credattack/
│ ├── cli.py # CLI (Typer) — empaquetado, respalda el script de consola
│ ├── core/
│ │ ├── config.py # Configuraciones Pydantic v2
│ │ ├── engine.py # AttackEngine (ThreadPoolExecutor)
│ │ ├── lockout.py # LockoutDetector (ventana deslizante)
│ │ ├── proxy.py # ProxyRotator
│ │ ├── mutator.py # PasswordMutator
│ │ ├── result.py # AttemptResult, SessionReport
│ │ ├── report.py # Generador de informes HTML
│ │ └── logger.py # Registro Rich + escritor JSONL
│ ├── protocols/ # 18 implementaciones de ProtocolAttacker
│ │ └── base.py # ProtocolAttacker abstracto
│ └── data/
│ ├── default_creds.json # Más de 200 valores por defecto de proveedores
│ ├── smart_patterns.json # Más de 140 plantillas empresariales
│ └── wordlists/ # Listas iniciales por servicio
├── attacks/ # Herramientas independientes de un solo archivo (anteriores a credattack/;
│ └── *.py # conservadas para scripts aún no migrados: cracking JWT,
│ # detección de WAF, enumeración de usuarios por tiempo)
├── utils/
│ └── credential_utils.py # Ayudantes compartidos para los scripts de attacks/
├── tests/
│ ├── conftest.py # Fixtures compartidos
│ ├── test_lockout.py
│ ├── test_mutator.py
│ ├── test_mutator_extended.py
│ ├── test_proxy.py
│ ├── test_result.py
│ ├── test_protocols_ssh.py
│ ├── test_protocols_ftp.py
│ └── test_protocols_http.py
├── wordlists/ # Stubs mínimos de prueba de humo
└── output/ # Registros e informes generados (ignorados por git)
Consulta CONTRIBUTING.md.
Abre una incidencia antes de enviar PRs grandes.
Todas las contribuciones deben cumplir con la política de uso ético en SECURITY.md.
Úsalo de forma responsable. Prueba éticamente. Mantente dentro de la ley.
| Reconocimiento | Base de datos de credenciales por defecto (200+ pares), generación inteligente de patrones derivados del nombre de usuario |
| Ataque | 17 atacantes de protocolo, 6 modos de ataque, campañas multi-objetivo |
| Evasión | Detección de bloqueo, limitación de velocidad configurable, jitter, rotación de proxies |
| Informes | Registro de auditoría JSONL, informe HTML Jinja2, banner de credenciales encontradas + volcado de archivos |
| Modo | Comando | Descripción |
|---|
| Diccionario | ssh, ftp, smb, … | Lista de palabras contra un usuario |
| Spray | spray | Una contraseña contra una lista de usuarios (seguro contra bloqueos) |
| Combo | combo | Cada usuario × cada contraseña |
| Inteligente | smart | Generación de patrones derivados del nombre de usuario/empresa |
| Por defecto | defaults | Probar más de 200 valores por defecto conocidos de servicios |
| Multi-objetivo | multi | Mismo ataque contra una lista de hosts |
| Pipeline completo | full | Todos los protocolos, un informe |
| # | Protocolo | Módulo | Puerto por Defecto | Notas |
|---|
| 1 | SSH | ssh.py | 22 | paramiko, autenticación por clave/contraseña |
| 2 | FTP | ftp.py | 21 | Modo activo y pasivo |
| 3 | Formulario HTTP | http_form.py | 80/443 | Detección automática de token CSRF |
| 4 | HTTP Basic | http_basic.py | 80 | RFC 7617 |
| 5 | HTTP Digest | http_digest.py | 80 | RFC 7616 |
| 6 | SMB | smb.py | 445 | impacket, NTLM |
| 7 | RDP | rdp.py | 3389 | impacket NLA |
| 8 | SMTP | smtp.py | 587 | STARTTLS |
| 9 | POP3 | pop3.py | 110 | Soporte APOP |
| 10 | IMAP | imap.py | 143 | STARTTLS |
| 11 | MySQL | mysql.py | 3306 | mysql-connector-python |
| 12 | MSSQL | mssql.py | 1433 | pymssql |
| 13 | Redis | redis_proto.py | 6379 | Comando AUTH |
| 14 | MongoDB | mongodb.py | 27017 | pymongo |
| 15 | WinRM | winrm.py | 5985 | NTLM, pywinrm |
| 16 | LDAP | ldap_proto.py | 389 | ldap3, auto-detección rootDSE |
| 17 | Telnet | telnet.py | 23 | TCP sin procesar |
| 18 | VNC | vnc.py | 5900 | Desafío-respuesta DES sin procesar |
| Bandera | Corta | Por defecto | Descripción |
|---|
--target | -t | — | Host / IP objetivo |
--port | 0 (por defecto del protocolo) | Anular puerto TCP | |
--username | -u | — | Nombre de usuario único |
--user-file | -U | — | Archivo de nombres de usuario separados por nueva línea |
--pass-file | -P | — | Archivo de contraseñas separadas por nueva línea |
--password | -p2 | — | Contraseña única |
--threads | -n | 10 | Trabajadores concurrentes |
--timeout | -T | 5.0 | Tiempo de espera por intento (s) |
--delay | -d | 0.0 | Retraso fijo entre intentos (s) |
--jitter | 0.0 | Jitter aleatorio máximo (s) | |
--stop-on-first | True | Detener por usuario tras el primer acierto | |
--proxy-file | None | Lista de proxies HTTP/SOCKS5 | |
--output-dir | -o | ./output | Directorio de resultados |
--verbosity | -v | 1 | Nivel de registro (0-3) |
--dry-run | False | Contar pares sin conectar |
| Estrategia | Método | Ejemplo de salida |
|---|
| Leet-speak | leet_speak(word) | p@ssw0rd, p455w0rd |
| Capitalización | capitalise_variants(word) | PASSWORD, Password, pAsSwOrD |
| Sufijo | suffix_append(word) | password123, password@2025 |
| Prefijo | prefix_append(word) | !password, mypassword |
| Recorrido de teclado | keyboard_walk(word) | qassword (a→q) |
| Patrones de nombre de usuario | username_patterns(user, company) | john123, Doe1!, ACME2024! |
| Estacional (v1.1) | seasonal_patterns(company) | Summer2024!, Winter25 |
| Envoltura de caracteres especiales (v1.1) | special_char_wrap(word) | !@Password, Password!@ |
| Combinar | combine(word, strategies) | encadena cualquiera de las anteriores |
| Inteligente (todo en uno) | smart_generate(user, company) | flujo deduplicado y limitado |
| Área | Pruebas |
|---|
| Detector de bloqueo (ventana deslizante, seguridad de subprocesos) | test_lockout.py |
| Estrategias del mutador de contraseñas | test_mutator.py |
| Nuevas estrategias del mutador (estacional, caracteres especiales) | test_mutator_extended.py |
| Rotador de proxies (verificación de salud, degradación) | test_proxy.py |
| Clases de datos Result y SessionReport | test_result.py |
| Mock del protocolo SSH | test_protocols_ssh.py |
| Mock del protocolo FTP | test_protocols_ftp.py |
| Mocks de HTTP Basic y Digest | test_protocols_http.py |
| Lista de palabras | Tamaño | Mejor para |
|---|
rockyou.txt | ~14 M | Diccionario general |
SecLists/Passwords/ | Varios | Específico de protocolo |
kaonashi.txt | ~64 M | Cobertura avanzada |
| Derivadas de OSINT | Variable | Ataques dirigidos |
| Tipo de Contraseña | Diccionario | Modo Inteligente | Spray (común) |
|---|
| 4 caracteres | ~90% | ~95% | ~60% |
| 6 caracteres | ~65% | ~75% | ~25% |
| 8 caracteres mixtos | ~15% | ~25% | ~5% |
| 10+ caracteres complejos | <5% | <5% | <1% |