24 KiB
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!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und 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 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 – OpenBSD SSH, in BSD, Linux-Distributionen und Windows seit Windows 10 enthalten
- Dropbear – SSH-Implementierung für Umgebungen mit geringem Speicher und Prozessorressourcen, in OpenWrt enthalten
- PuTTY – SSH-Implementierung für Windows, der Client wird häufig verwendet, die Verwendung des Servers ist seltener
- CopSSH – Implementierung von OpenSSH für Windows
SSH-Bibliotheken (Serverseitige Implementierung):
- libssh – plattformübergreifende C-Bibliothek, die das SSHv2-Protokoll implementiert, mit Bindungen in Python, Perl und R; wird von KDE für sftp und von GitHub für die git SSH-Infrastruktur verwendet
- wolfSSH – SSHv2-Serverbibliothek in ANSI C geschrieben und für eingebettete, RTOS- und ressourcenbeschränkte Umgebungen ausgelegt
- Apache MINA SSHD – Die Apache SSHD-Java-Bibliothek basiert auf Apache MINA
- paramiko – Python SSHv2-Protokollbibliothek
Enumeration
Banner Grabbing
nc -vn <IP> 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 ist ein aktualisierter Fork von 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
usage: ssh-audit.py [-1246pbcnjvlt] <host>
-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> 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=<level> minimum output level (info|warn|fail)
-t, --timeout=<secs> timeout (in seconds) for connection and reading
(default: 5)
$ python3 ssh-audit <IP>
Öffentlicher SSH-Schlüssel des Servers
Hier in Aktion ansehen (Asciinema)
ssh-keyscan -t rsa <IP> -p <PORT>
Schwache Verschlüsselungsalgorithmen
Dies wird standardmäßig von nmap entdeckt. Sie können jedoch auch sslcan oder sslyze verwenden.
Nmap-Skripte
nmap -p22 <ip> -sC # Send default nmap scripts for SSH
nmap -p22 <ip> -sV # Retrieve version
nmap -p22 <ip> --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 <ip> --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys
nmap -p22 <ip> --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
Einige gängige SSH-Anmeldeinformationen finden Sie hier und hier 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.
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.
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 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 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 das Richtige für Sie.
SSH-Snake führt automatisch und rekursiv folgende Aufgaben aus:
- Auf dem aktuellen System werden alle SSH-Privatschlüssel gefunden,
- Auf dem aktuellen System werden alle Hosts oder Ziele (Benutzer@Host) gefunden, die die privaten Schlüssel akzeptieren könnten,
- Es wird versucht, sich mit allen Zielen unter Verwendung aller entdeckten privaten Schlüssel zu verbinden,
- 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:
- Bearbeiten Sie die SSH-Konfigurationsdatei mit:
sudoedit /etc/ssh/sshd_config
- Ändern Sie die Einstellung von
#PermitRootLogin yes
zuPermitRootLogin no
. - Laden Sie die Konfiguration neu mit:
sudo systemctl daemon-reload
- Starten Sie den SSH-Server neu, um die Änderungen anzuwenden:
sudo systemctl restart sshd
SFTP-Brute-Force
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.
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:
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
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:
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:
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.
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
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa
Fuzzing
- https://packetstormsecurity.com/files/download/71252/sshfuzz.txt
- 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://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 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!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud github Repositories einreichen.