
CTF-Challenge zur Ausnutzung der libSSH-Authentifizierungsumgehung CVE-2018-10933. Enthält Docker-Setup, Exploitation-Skript und Walkthrough zur Entdeckung versteckter Flags über symbolische Verknüpfungen.
Basierend auf CVE-2018-10933
CVE-2018-10933 ist eine Sicherheitslücke, die in ausgewählten Versionen von libSSH entdeckt wurde und potenziell uneingeschränkten Maschinenzugriff ermöglichen kann. Die Schwachstelle entsteht durch unsachgemäße Behandlung von Paketkopfdaten während des Authentifizierungsprozesses, bei dem das Senden eines manipulierten Pakets mit dem Byte MSG_USERAUTH_SUCCESS jedem erlauben kann, die Authentifizierung zu umgehen. Sie haben dann vollen Zugriff auf die Maschine.
Die Grundlage dieser Challenge besteht also darin, dass die Teilnehmer das bereitgestellte Docker-Image untersuchen, diese Schwachstelle entdecken, sie ausnutzen, um Zugriff zu erhalten, und dann den Schlüssel finden, der in einem Symlink auf der Maschine versteckt ist.
Someone got into my machine via port 22...
It looks like they didnt even know my credentials.
Anyways, they made a file with an odd name, but it's gone now,
I wonder if there's still some trace of the filename -
it might be something symbolic of the attacker...
Can you figure out how they got in and help me find the filename?
Im Folgenden finden Sie eine detaillierte Schritt-für-Schritt-Anleitung der vorgesehenen Lösung:
Beachten Sie aus der Challenge-Beschreibung, dass der Angreifer über Port 22 Zugriff erlangte, einen Port, der normalerweise für SSH reserviert ist. Beachten Sie auch, dass der Angreifer keine Anmeldedaten verwendet hat, um Zugriff zu erlangen.
Daraus ergibt sich, dass bei der Suche nach vergangenen Fehlern, um ohne Anmeldedaten über SSH auf eine Maschine zuzugreifen, das Problem mit dem MSG_USERAUTH_SUCCESS-Byte sehr wahrscheinlich ist. Alternativ kann man durch Initiieren einer Verbindung zu Port 22 die Version von libSSH ermitteln, die ausgeführt wird, und dann nach gängigen Exploits für diese Version suchen.
Aus der Beschreibung ist auch ersichtlich, dass der gesuchte Dateiname (die Flagge) nur als Ziel eines symbolischen Links existiert.
Da nun bekannt ist, dass Zugriff durch Ausnutzung dieser Schwachstelle erlangt werden kann, kann man ein eigenes Skript schreiben oder ein Beispielskript kopieren, das diesen Exploit ausführt, und einen Befehl auf der Zielmaschine ausführen. Ich habe für diese Lösung ein Exploit-Skript angepasst und es libsshauthbypass.py genannt.
Um dieses Skript auszuführen und die Flagge von der Maschine zu erhalten, könnte man im Fall des Demo-Images einen Befehl ähnlich dem folgenden ausführen:
./libsshauthbypass.py --host localhost -p 1337 -c 'find / -type l -exec stat {} + | grep "File:" | sed -E "s/.*\-> (.*)$/\1/g" | grep "definitelyarealCTF"'
was dann eine Ausgabe ähnlich der folgenden liefert
sspringer-fedora-CVE: ./libsshauthbypass.py --host localhost -p 1337 -c 'find / -type l -exec stat {} + | grep "File:" | sed -E "s/.*\-> (.*)$/\1/g" | grep "definitelyarealCTF"'
INFO:paramiko.transport:Connected (version 2.0, client libssh_0.8.1)
definitelyarealCTF{totally_a_REAL_flag}
Um eine Version dieser Challenge für Ihr eigenes CTF zu verwenden, wird dringend empfohlen, die Dockerfile zu ändern, um einen anderen Pfad als den standardmäßig bereitgestellten zu verwenden, die Flagge in flag.txt zu ändern (obwohl es weiterhin eine Zeile sein muss) und dann das Image neu zu erstellen. Beachten Sie, dass es notwendig sein kann, für jeden Verbindungsversuch einen neuen Container zu hosten, um zu verhindern, dass jemand einen destruktiven Befehl ausführt und alle Teilnehmer beeinträchtigt.
Um das Docker-Image mit einer neuen Flagge neu zu erstellen (und zu testen)
flag.txt mit der neuen Flagge./build_run <image name>[:<version number] <port number> aus./libsshauthbypass.py oder Ihr eigenes Skript, um den Container mit der korrekten Payload und einem gewünschten Befehl zu kontaktierenexit der vom build_run-Skript bereitgestellten Shell wird der Container heruntergefahren und gelöscht, aber das Image bleibt erhalten und wird als <image name> getaggt.Proof of Concept: https://youtu.be/ELrOBm02ANg
Walkthrough der Challenge https://youtu.be/Ii121piSZR0