hacktricks/network-services-pentesting/pentesting-ssh.md

24 KiB
Raw Blame History

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:

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:

  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-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:

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>

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

Referenzen

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: