22 - SSH/SFTP

1.1 Was ist FTP?

FTP ist ein Netzwerkprotokoll zur Übertragung und Verwaltung von Dateien zwischen einem Client und einem Server. Es arbeitet standardmäßig auf Port 21 und unterstützt:

  • Authentifizierung durch Benutzername und Passwort.

  • Optional anonymen Zugriff (z. B. mit anonymous als Benutzername und einem beliebigen Passwort).


1.2 Grundlegende FTP-Befehle

Hier die wichtigsten FTP-Befehle, die im Client-Tool verwendet werden:

bashCode kopieren$ ftp <Server-IP>              # Verbindung zu einem FTP-Server herstellen.
  • Nach dem Verbindungsaufbau werden Benutzername und Passwort abgefragt. Bei anonymem Zugriff oft:

    • Benutzername: anonymous

    • Passwort: Beliebiger Wert.

Häufig genutzte FTP-Befehle:

  • help: Zeigt eine Liste aller verfügbaren Befehle.

  • dir: Listet Dateien und Verzeichnisse auf.

  • cd <Pfad>: Wechselt in ein Verzeichnis.

  • get <Datei>: Lädt eine Datei vom Server herunter.

  • mget <Datei*>: Lädt mehrere Dateien herunter (z. B. *.txt).

  • put <Datei>: Lädt eine Datei auf den Server hoch.

  • mput <Datei*>: Lädt mehrere Dateien hoch.

  • delete <Datei>: Löscht eine Datei auf dem Server.

  • bye: Trennt die Verbindung.

Automatische Prüfung auf anonymen Zugriff:

bashCode kopieren$ nmap --script ftp-anon -p21 <Server-IP>    # Prüft, ob anonymer Zugriff möglich ist.

2. SSH (Secure Shell)

2.1 Was ist SSH?

SSH ist ein verschlüsseltes Netzwerkprotokoll für sicheren Fernzugriff auf Systeme. Standardmäßig arbeitet es auf Port 22 und ermöglicht:

  • Remote-Kommandozeilen-Zugriff.

  • Dateiübertragungen.

  • Port-Weiterleitung (Tunneling).


2.2 Grundlegende SSH-Befehle

SSH-Verbindung herstellen:

ssh <Benutzername>@<Server-IP>         # Verbindung zu einem SSH-Server.
  • Nach Eingabe des Passworts öffnet sich eine Remote-Shell.

Häufig genutzte Optionen:

  • -p <Portnummer>: Verbindet sich zu einem spezifischen Port (z. B. für Nicht-Standard-Ports).

  • -i <Schlüsseldatei>: Nutzt einen privaten SSH-Schlüssel für die Authentifizierung.


2.3 SSH ohne Passwort (Public Key Authentication)

Um SSH ohne Passwort zu nutzen, erstellen Sie ein Schlüssel-Paar und übertragen den öffentlichen Schlüssel auf den Server:

  1. Schlüssel generieren:

    ssh-keygen -t rsa
    • Ergebnis: id_rsa (privat) und id_rsa.pub (öffentlich).

  2. Öffentlichen Schlüssel kopieren:

    ssh-copy-id <Benutzername>@<Server-IP>
  3. Verbindung herstellen:

    ssh <Benutzername>@<Server-IP>

2.4 Banner Grabbing

Banner Grabbing liefert Informationen über den SSH-Dienst:

nc -vn <Server-IP> 22
# Zeigt die SSH-Version und weitere Informationen des Servers.

3. Bruteforcing und Passwort-Spraying

3.1 Bruteforce-Angriffe

SSH-Bruteforce mit Hydra:

hydra -l <Benutzername> -P <Passwortliste> <Server-IP> ssh
  • -l: Einzelner Benutzername.

  • -P: Passwortliste.

FTP-Bruteforce mit Hydra:

hydra -l <Benutzername> -P <Passwortliste> <Server-IP> ftp

3.2 Passwort-Spraying

Passwort-Spraying testet ein Passwort gegen eine Liste von Benutzern:

  • SSH-Spraying:

    hydra -L <Benutzerliste> -p <Passwort> <Server-IP> ssh
  • FTP-Spraying:

    hydra -L <Benutzerliste> -p <Passwort> <Server-IP> ftp

4. Dateitransfer mit SCP (Secure Copy Protocol)

SCP nutzt SSH, um Dateien sicher zu übertragen.

4.1 Datei auf einen Server hochladen

scp <Datei> <Benutzername>@<Server-IP>:<Zielpfad>
# Beispiel:
$ scp report.txt user@192.168.1.10:/home/user/

4.2 Datei vom Server herunterladen

scp <Benutzername>@<Server-IP>:<Dateipfad> <Zielpfad>
# Beispiel:
$ scp user@192.168.1.10:/home/user/report.txt /tmp/

5. Lokale Enumeration nach SSH-Zugriff

Nach einer erfolgreichen SSH-Verbindung können lokale Informationen gesammelt werden:

ss -tl       # Listet offene Ports auf.
$ uname -a     # Zeigt Systeminformationen.
$ id           # Zeigt Benutzerrechte an.

5. SSH Port-Forwarding (Einfacher Überblick)

Lokales Port-Forwarding: Leitet einen lokalen Port auf einen entfernten Port weiter.

ssh -L <Lokaler-Port>:<Remote-Host>:<Remote-Port> <Benutzername>@<Server-IP>

Remote Port-Forwarding: Leitet einen entfernten Port auf einen lokalen Port weiter.

ssh -R <Remote-Port>:<Lokaler-Host>:<Lokaler-Port> <Benutzername>@<Server-IP>

Dynamisches Port-Forwarding (SOCKS5 Proxy):

ssh -D <Lokaler-Port> <Benutzername>@<Server-IP>

Beispiel

  • Du hast Zugriff auf den Zielserver via SSH als Benutzer

  • PostgreSQL läuft auf dem Zielserver auf Port 5432 (lokalerport 127.0.0.1/localhost)

    • also bei z.b. postgresql

Da der Port lokal ist, zeigt es diesen auch nicht an auf NMAP etc. da dieser nur hört, wenn die anfrage von lokal kommt.

Um dies zu umgehen kann man folgenden befehl machen

ssh -L 1234:localhost:5432 christine@10.129.228.195
  1. ssh: Du baust eine SSH-Verbindung zum Server auf.

  2. -L: Legt einen Tunnel fest, um Daten weiterzuleiten.

  3. 1234: Lokaler Port auf deinem Rechner, der für die Weiterleitung genutzt wird.

  4. localhost:5432: Ziel auf dem Server:

    • localhost: PostgreSQL läuft auf dem Zielserver und ist nur dort lokal erreichbar (wird dem Server vorgegaukelt, dass man local ist)

    • 5432: Der Port, auf dem PostgreSQL lauscht.

  5. christine@10.129.228.195:

    • christine: SSH-Benutzername.

    • 10.129.228.195: IP-Adresse des Zielservers.

Danach kann mit dem zugriff via port 1234 vorgekaukelt werden, dass man local mit dem port 5432 kommuniziert

psql -U christine -h localhost -p 1234

In einfachen Worten:

  • Du leitest lokale Verbindungen von Port 1234 auf deinem Rechner zu Port 5432 auf dem Server 10.129.228.195 weiter.

  • Dadurch kannst du auf PostgreSQL zugreifen, als würde es bei dir lokal laufen.

Last updated