# 22 - Pentesting SSH/SFTP
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github Repositories einreichen.
**Bug-Bounty-Tipp**: **Melden Sie sich an** bei **Intigriti**, einer Premium-**Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde**! Treten Sie uns bei [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) heute bei und beginnen Sie, Prämien von bis zu **100.000 $** zu verdienen! {% embed url="https://go.intigriti.com/hacktricks" %} ## Grundlegende Informationen **SSH (Secure Shell oder Secure Socket Shell)** ist ein Netzwerkprotokoll, das eine sichere Verbindung zu einem Computer über ein unsicheres Netzwerk ermöglicht. Es ist wesentlich für die Wahrung der Vertraulichkeit und Integrität von Daten beim Zugriff auf entfernte Systeme. **Standardport:** 22 ``` 22/tcp open ssh syn-ack ``` **SSH-Server:** * [openSSH](http://www.openssh.org) – OpenBSD SSH, in BSD, Linux-Distributionen und Windows seit Windows 10 enthalten * [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – SSH-Implementierung für Umgebungen mit geringem Speicher und Prozessorressourcen, in OpenWrt enthalten * [PuTTY](https://www.chiark.greenend.org.uk/\~sgtatham/putty/) – SSH-Implementierung für Windows, der Client wird häufig verwendet, die Verwendung des Servers ist seltener * [CopSSH](https://www.itefix.net/copssh) – Implementierung von OpenSSH für Windows **SSH-Bibliotheken (Serverseitige Implementierung):** * [libssh](https://www.libssh.org) – plattformübergreifende C-Bibliothek, die das SSHv2-Protokoll implementiert, mit Bindungen in [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) und [R](https://github.com/ropensci/ssh); wird von KDE für sftp und von GitHub für die git SSH-Infrastruktur verwendet * [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – SSHv2-Serverbibliothek in ANSI C geschrieben und für eingebettete, RTOS- und ressourcenbeschränkte Umgebungen ausgelegt * [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Die Apache SSHD-Java-Bibliothek basiert auf Apache MINA * [paramiko](https://github.com/paramiko/paramiko) – Python SSHv2-Protokollbibliothek ## Enumeration ### Banner Grabbing ```bash nc -vn 22 ``` ### Automatisierte ssh-audit ssh-audit ist ein Tool zur Überprüfung der Konfiguration von SSH-Servern und -Clients. [https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) ist ein aktualisierter Fork von [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/) **Funktionen:** * Unterstützung für SSH1- und SSH2-Protokollserver; * Analyse der SSH-Clientkonfiguration; * Banner abrufen, Gerät oder Software und Betriebssystem erkennen, Komprimierung erkennen; * Schlüsselaustausch-, Hostschlüssel-, Verschlüsselungs- und Nachrichtenauthentifizierungsalgorithmen sammeln; * Ausgabe von Algorithmusinformationen (verfügbar seit, entfernt/deaktiviert, unsicher/schwach/veraltet, usw.); * Ausgabe von Algorithmusempfehlungen (anfügen oder entfernen basierend auf erkannter Softwareversion); * Ausgabe von Sicherheitsinformationen (bezogene Probleme, zugewiesene CVE-Liste, usw.); * Analyse der SSH-Versionkompatibilität basierend auf Algorithmusinformationen; * Historische Informationen von OpenSSH, Dropbear SSH und libssh; * läuft auf Linux und Windows; * keine Abhängigkeiten ```bash usage: ssh-audit.py [-1246pbcnjvlt] -1, --ssh1 force ssh version 1 only -2, --ssh2 force ssh version 2 only -4, --ipv4 enable IPv4 (order of precedence) -6, --ipv6 enable IPv6 (order of precedence) -p, --port= port to connect -b, --batch batch output -c, --client-audit starts a server on port 2222 to audit client software config (use -p to change port; use -t to change timeout) -n, --no-colors disable colors -j, --json JSON output -v, --verbose verbose output -l, --level= minimum output level (info|warn|fail) -t, --timeout= timeout (in seconds) for connection and reading (default: 5) $ python3 ssh-audit ``` ### Öffentlicher SSH-Schlüssel des Servers [Hier in Aktion ansehen (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp) ```bash ssh-keyscan -t rsa -p ``` ### Schwache Verschlüsselungsalgorithmen Dies wird standardmäßig von **nmap** entdeckt. Sie können jedoch auch **sslcan** oder **sslyze** verwenden. ### Nmap-Skripte ```bash nmap -p22 -sC # Send default nmap scripts for SSH nmap -p22 -sV # Retrieve version nmap -p22 --script ssh2-enum-algos # Retrieve supported algorythms nmap -p22 --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys nmap -p22 --script ssh-auth-methods --script-args="ssh.user=root" # Check authentication methods ``` ### Shodan * `ssh` ## Brute-Force von Benutzernamen, Passwörtern und privaten Schlüsseln ### Benutzername Enumeration In einigen Versionen von OpenSSH können Sie einen Timing-Angriff durchführen, um Benutzer zu enumerieren. Sie können ein Metasploit-Modul verwenden, um dies auszunutzen: ``` msf> use scanner/ssh/ssh_enumusers ``` ### [Brute Force](../generic-methodologies-and-resources/brute-force.md#ssh) Einige gängige SSH-Anmeldeinformationen finden Sie [hier](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) und [hier](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) und unten. ### Brute Force für private Schlüssel Wenn Sie einige SSH-Private Keys kennen, die verwendet werden könnten... probieren wir es aus. Sie können das nmap-Skript verwenden: ``` https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html ``` Oder das MSF-Hilfsmodul: ``` msf> use scanner/ssh/ssh_identify_pubkeys ``` Oder verwenden Sie `ssh-keybrute.py` (native Python3, leichtgewichtig und mit aktivierten Legacy-Algorithmen): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). #### Bekannte schlechte Schlüssel können hier gefunden werden: {% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %} #### Schwache SSH-Schlüssel / Vorhersehbarer PRNG von Debian Einige Systeme weisen bekannte Schwachstellen im Zufallsseed auf, der zur Generierung kryptografischer Materialien verwendet wird. Dies kann zu einem dramatisch reduzierten Schlüsselraum führen, der durch Brute-Force-Angriffe geknackt werden kann. Vorab generierte Schlüsselsätze, die auf Debian-Systemen mit schwachem PRNG generiert wurden, sind hier verfügbar: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh). Sie sollten hier nach gültigen Schlüsseln für die Opfermaschine suchen. ### Kerberos **crackmapexec** verwendet das `ssh`-Protokoll und kann die Option `--kerberos` verwenden, um **über Kerberos zu authentifizieren**.\ Für weitere Informationen führen Sie `crackmapexec ssh --help` aus. ## Standardanmeldeinformationen | **Hersteller** | **Benutzernamen** | **Passwörter** | | -------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | APC | apc, Gerät | apc | | Brocade | admin | admin123, password, brocade, fibranne | | Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change\_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme | | Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler | | D-Link | admin, Benutzer | private, admin, Benutzer | | Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin | | EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc | | HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc\_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC\_op, !manage, !admin | | Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 | | IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer | | Juniper | netscreen | netscreen | | NetApp | admin | netapp123 | | Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle | | VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default | ## SSH-MitM Wenn Sie sich im lokalen Netzwerk wie das Opfer befinden, das sich mit dem SSH-Server mit Benutzername und Passwort verbinden wird, könnten Sie versuchen, **einen MitM-Angriff durchzuführen, um diese Anmeldeinformationen zu stehlen:** **Angriffsweg:** * **Verkehrsumleitung:** Der Angreifer **leitet** den Verkehr des Opfers auf seine Maschine um und **interceptiert** somit den Verbindungsversuch zum SSH-Server. * **Interception und Protokollierung:** Die Maschine des Angreifers fungiert als **Proxy** und **erfasst** die Anmeldeinformationen des Benutzers, indem sie vorgibt, der legitime SSH-Server zu sein. * **Befehlsausführung und Weiterleitung:** Schließlich **protokolliert der Server des Angreifers die Anmeldeinformationen** des Benutzers, **leitet die Befehle an den echten SSH-Server weiter**, **führt** sie aus und **sendet die Ergebnisse zurück** an den Benutzer, wodurch der Prozess nahtlos und legitim erscheint. [**SSH MITM**](https://github.com/jtesta/ssh-mitm) tut genau das, was oben beschrieben ist. Um den tatsächlichen MitM durchzuführen, könnten Sie Techniken wie ARP-Spoofing, DNS-Spoofing oder andere in den [**Network Spoofing attacks**](../generic-methodologies-and-resources/pentesting-network/#spoofing) beschriebenen Techniken verwenden. ## SSH-Snake Wenn Sie ein Netzwerk mithilfe entdeckter SSH-Privatschlüssel auf Systemen durchqueren möchten, wobei jeder private Schlüssel auf jedem System für neue Hosts verwendet wird, dann ist [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) das Richtige für Sie. SSH-Snake führt automatisch und rekursiv folgende Aufgaben aus: 1. Auf dem aktuellen System werden alle SSH-Privatschlüssel gefunden, 2. Auf dem aktuellen System werden alle Hosts oder Ziele (Benutzer@Host) gefunden, die die privaten Schlüssel akzeptieren könnten, 3. Es wird versucht, sich mit allen Zielen unter Verwendung aller entdeckten privaten Schlüssel zu verbinden, 4. Wenn eine Verbindung zu einem Ziel erfolgreich hergestellt wird, werden die Schritte #1 - #4 auf dem verbundenen System wiederholt. Es ist vollständig selbstreplizierend und selbstverbreitend - und vollständig ohne Dateien. ## Konfigurationsfehler ### Root-Anmeldung Es ist üblich, dass SSH-Server die Root-Benutzeranmeldung standardmäßig zulassen, was ein erhebliches Sicherheitsrisiko darstellt. **Das Deaktivieren der Root-Anmeldung** ist ein entscheidender Schritt zur Sicherung des Servers. Unberechtigter Zugriff mit administrativen Rechten und Brute-Force-Angriffe können durch diese Änderung abgemildert werden. **Um die Root-Anmeldung in OpenSSH zu deaktivieren:** 1. **Bearbeiten Sie die SSH-Konfigurationsdatei** mit: `sudoedit /etc/ssh/sshd_config` 2. **Ändern Sie die Einstellung** von `#PermitRootLogin yes` zu **`PermitRootLogin no`**. 3. **Laden Sie die Konfiguration neu** mit: `sudo systemctl daemon-reload` 4. **Starten Sie den SSH-Server neu**, um die Änderungen anzuwenden: `sudo systemctl restart sshd` ### SFTP-Brute-Force * [**SFTP-Brute-Force**](../generic-methodologies-and-resources/brute-force.md#sftp) ### SFTP-Befehlsausführung Es kommt häufig zu einem Fehler bei SFTP-Einrichtungen, bei denen Administratoren möchten, dass Benutzer Dateien austauschen, ohne den Remote-Shell-Zugriff zu aktivieren. Trotz der Festlegung von Benutzern mit nicht-interaktiven Shells (z. B. `/usr/bin/nologin`) und der Beschränkung auf ein bestimmtes Verzeichnis bleibt eine Sicherheitslücke bestehen. **Benutzer können diese Einschränkungen umgehen**, indem sie unmittelbar nach dem Einloggen die Ausführung eines Befehls (wie `/bin/bash`) anfordern, bevor ihr bestimmter nicht-interaktiver Shell übernimmt. Dies ermöglicht eine nicht autorisierte Befehlsausführung, die die beabsichtigten Sicherheitsmaßnahmen untergräbt. [Beispiel von hier](https://community.turgensec.com/ssh-hacking-guide/): ```bash ssh -v noraj@192.168.1.94 id ... Password: debug1: Authentication succeeded (keyboard-interactive). Authenticated to 192.168.1.94 ([192.168.1.94]:22). debug1: channel 0: new [client-session] debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: network debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: Sending command: id debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0 uid=1000(noraj) gid=100(users) groups=100(users) debug1: channel 0: free: client-session, nchannels 1 Transferred: sent 2412, received 2480 bytes, in 0.1 seconds Bytes per second: sent 43133.4, received 44349.5 debug1: Exit status 0 $ ssh noraj@192.168.1.94 /bin/bash ``` Hier ist ein Beispiel für eine sichere SFTP-Konfiguration (`/etc/ssh/sshd_config` - openSSH) für den Benutzer `noraj`: ``` Match User noraj ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no PermitTunnel no X11Forwarding no PermitTTY no ``` Diese Konfiguration erlaubt nur SFTP: Shell-Zugriff wird deaktiviert, indem der Startbefehl erzwungen wird und der TTY-Zugriff deaktiviert wird, aber auch alle Arten von Portweiterleitungen oder Tunneling werden deaktiviert. ### SFTP Tunneling Wenn Sie Zugriff auf einen SFTP-Server haben, können Sie Ihren Datenverkehr auch durch diesen tunneln, beispielsweise unter Verwendung der gängigen Portweiterleitung: ```bash sudo ssh -L :: -N -f @ ``` ### SFTP Symlink Der **sftp**-Befehl verfügt über den Befehl "**symlink**". Daher können Sie, wenn Sie **Schreibrechte** in einem bestimmten Ordner haben, **Symlinks** von **anderen Ordnern/Dateien** erstellen. Da Sie wahrscheinlich in einem Chroot **gefangen** sind, wird dies für Sie **nicht besonders nützlich** sein, aber wenn Sie auf den erstellten **Symlink** von einem **nicht-chroot**-**Dienst** aus zugreifen können (zum Beispiel, wenn Sie auf den Symlink über das Web zugreifen können), könnten Sie die **durch den Webbrowser verknüpften Dateien öffnen**. Um beispielsweise einen **Symlink** von einer neuen Datei **"**_**froot**_**" zu "**_**/**_**" zu erstellen**: ```bash sftp> symlink / froot ``` ### Authentifizierungsmethoden In einer Umgebung mit hoher Sicherheit ist es eine gängige Praxis, nur die Authentifizierungsmethoden auf Schlüsselbasis oder Zwei-Faktor-Authentifizierung zu aktivieren, anstatt der einfachen Passwort-basierten Authentifizierung. Oft werden jedoch die stärkeren Authentifizierungsmethoden aktiviert, ohne die schwächeren zu deaktivieren. Ein häufiger Fall ist die Aktivierung von `publickey` in der openSSH-Konfiguration und die Festlegung als Standardmethode, ohne `password` zu deaktivieren. Daher kann ein Angreifer durch Verwendung des Verbose-Modus des SSH-Clients sehen, dass eine schwächere Methode aktiviert ist: ```bash ssh -v 192.168.1.94 OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019 ... debug1: Authentications that can continue: publickey,password,keyboard-interactive ``` Zum Beispiel, wenn ein Authentifizierungsfehlerlimit festgelegt ist und Sie nie die Möglichkeit haben, die Passwortmethode zu erreichen, können Sie die `PreferredAuthentications`-Option verwenden, um die Verwendung dieser Methode zu erzwingen. ```bash ssh -v 192.168.1.94 -o PreferredAuthentications=password ... debug1: Next authentication method: password ``` Überprüfen Sie die SSH-Serverkonfiguration, um sicherzustellen, dass nur erwartete Methoden autorisiert sind. Die Verwendung des Verbose-Modus auf dem Client kann helfen, die Wirksamkeit der Konfiguration zu sehen. ### Konfigurationsdateien ```bash ssh_config sshd_config authorized_keys ssh_known_hosts known_hosts id_rsa ``` ## Fuzzing * [https://packetstormsecurity.com/files/download/71252/sshfuzz.txt](https://packetstormsecurity.com/files/download/71252/sshfuzz.txt) * [https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh\_version\_2](https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh\_version\_2) ## Referenzen * Sie finden interessante Anleitungen zur Absicherung von SSH unter [https://www.ssh-audit.com/hardening\_guides.html](https://www.ssh-audit.com/hardening\_guides.html) * [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide)
**Bug-Bounty-Tipp**: **Registrieren** Sie sich bei **Intigriti**, einer Premium-**Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde**! Treten Sie uns noch heute bei [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) bei und beginnen Sie, Prämien von bis zu **$100.000** zu verdienen! {% embed url="https://go.intigriti.com/hacktricks" %} ## HackTricks Automatische Befehle ``` Protocol_Name: SSH Port_Number: 22 Protocol_Description: Secure Shell Hardening Entry_1: Name: Hydra Brute Force Description: Need Username Command: hydra -v -V -u -l {Username} -P {Big_Passwordlist} -t 1 {IP} ssh Entry_2: Name: consolesless mfs enumeration Description: SSH enumeration without the need to run msfconsole Note: sourced from https://github.com/carlospolop/legion Command: msfconsole -q -x 'use auxiliary/scanner/ssh/ssh_version; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ssh/juniper_backdoor; set RHOSTS {IP}; set RPORT 22; run; exit' ```
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github Repositories einreichen.