
Remote OpenSSH-Benutzernamen-Enumeration-Exploit für CVE-2018-15473, mit fehlerhaften Paket- und Timing-Angriffsskripten sowie Multithread-Scanning.
OpenSSH bis Version 7.7 ermöglicht es entfernten Angreifern, gültige Benutzernamen zu enumerieren, indem sie fehlerhafte Authentifizierungsanfragen senden und unterschiedliche Serverantworten beobachten.
| Feld | Wert |
|---|---|
| Betroffene Software | OpenSSH 2.3 bis 7.7 |
| CVSS v3.1 | 5.3 (Mittel) |
| Angriffsvektor | Netzwerk (remote, keine Authentifizierung erforderlich) |
| Grundursache | Der Server verzögert den Abbruch für ungültige Benutzer nicht, bis das vollständige Paket geparst ist (auth2-gss.c, auth2-hostbased.c, auth2-pubkey.c) |
| Auswirkung | Informationsoffenlegung – Aufzählung gültiger Benutzernamen |
exploit.py — Fehlerhaftes Paket (schnell, mehrthreadig)Sendet eine verkürzte SSH_MSG_USERAUTH_REQUEST (boolesches Feld entfernt). Ungültige Benutzer lösen einen vorzeitigen Abbruch aus (USERAUTH_FAILURE), gültige Benutzer führen zur Trennung der Verbindung.
exploit_timing.py — Timing-Angriff (langsamer, funktioniert auf gepatchten Servern)Sendet ein sehr langes Passwort (~100 KB) über Passwort-Authentifizierung. Gültige Benutzer benötigen länger, da der Server das Passwort vor der Zurückweisung hasht, während ungültige Benutzer sofort abgewiesen werden. Läuft sequenziell und kalibriert den Schwellenwert automatisch.
Verwenden Sie dies, wenn exploit.py falsch positive Ergebnisse liefert (gepatchte Server).
git clone <this-repo-url>
cd cve-2018-15473
pip install -r requirements.txt
# Malformed packet (try this first)
python3 exploit.py <target_ip> 22 <lhost> <lport> -u root
python3 exploit.py <target_ip> 22 <lhost> <lport> -w usernames.txt -t 8
# Timing attack (fallback for patched servers)
python3 exploit_timing.py <target_ip> 22 <lhost> <lport> -u root
python3 exploit_timing.py <target_ip> 22 <lhost> <lport> -w usernames.txt
| Argument | Beschreibung |
|---|
target_ip | IP des Ziel-SSH-Servers |
target_port | Ziel-SSH-Port (normalerweise 22) |
lhost | Angreifer-IP (unbenutzt, zur Vorlagenkonsistenz beibehalten) |
lport | Angreifer-Port (unbenutzt, zur Vorlagenkonsistenz beibehalten) |
-u, --username | Einzelner zu testender Benutzername |
-w, --wordlist | Pfad zu einer Wortlistendatei (ein Benutzername pro Zeile) |
-t, --threads | Anzahl der Threads (Standard: 4, nur exploit.py) |