Verfügbarkeit eines FTP-Dienstes mit Python prüfen

Die Programmiersprache Python ist vielseitig einsetzbar, so auch auf dem Gebiet der IT-Forensik. Den Auftakt zu verschiedenen Beispielen macht ein einfaches Python-Skript, mit dem überprüft werden kann, ob ein FTP-Dienst verfügbar ist.

Damit eine etwaige Verbindung zu einem FTP-Dienst hergestellt werden kann, muss das Modul socket importiert werden. Wobei die Verwendung von socket nicht auf FTP begrenzt ist. Als Parameter erwartet socket einen Host und einen Port. Im Falle von FTP würde man „21“ als Port angeben. Es könnte auch eine andere Port-Nummer übergeben werden. Damit eignet sich dieses Skript auch für die Überprüfung der Erreichbarkeit anderer Dienste. Im Grunde handelt es sich hier also um einen (sehr einfachen) Portscanner.

Nachfolgend die ersten drei Zeilen des Python-Skripts:

import socket

socket.setdefaulttimeout(4)
s = socket.socket()

Nach der Importanweisung wird ein Timeout von vier Sekunden festgelegt. Abschließend erfolgt die Instanziierung, wobei das Socket-Objekt der Variablen s zugewiesen wird.

Anschließend wird versucht, eine Verbindung zum Host auf Port 21 aufzubauen.

try:
    s.connect(('192.168.170.2', 21))
except IOError:
    print('An error occurred!')

Falls dies nicht funktionieren sollte, also auf Port 21 kein FTP-Dienst läuft, wird eine Fehlermeldung ausgegeben.

Mit der nächsten Zeile

banner = s.recv(1024)

wird die empfangene Bannerinformation (1024 Bytes sind ausreichend) der Variable banner zugewiesen.

Schließlich lassen wir uns die empfangenen Informationen ausgeben:

print('Port 21 is available.')
print(banner)

Die hier verwendete IP-Adresse 192.168.170.2 ist ein lokaler Linux-Server, auf dem CentOS 8 installiert ist. Die Ausführung des Skripts führt bei mir zu folgender Ausgabe:

Port 21 is available.
b'220 Welcome to the FTP service on centos8.local!\r\n'

Wir erhalten also zwei Informationen. Zum einen läuft auf Port 21 ein FTP-Dienst, zum anderen handelt es sich wahrscheinlich um ein CentOS-Linux (Version 8).

Es handelt sich hier um einen sehr simplen Portscanner. Sowohl host als auch port sind hart-codiert. Schöner wäre es, wenn der Benutzer beim Aufrufen des Skripts diese Werte übergeben könnte. Dies ist aber ein Thema für einen zukünftigen Blogbeitrag.

Noch eine Anmerkung zum Schluß: Die Ausgabe des verwendeten Betriebssystems bietet Angreifern eine zusätzliche Angriffsfläche. Wenn Ihr also einen Server betreibt, konfiguriert Eure Serverdienste dergestalt, dass solche Informationen nicht preisgegeben werden.

Weiterführende Links