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

341 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 22 - Test di penetrazione SSH/SFTP
<details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details>
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**Suggerimento per il bug bounty**: **iscriviti** a **Intigriti**, una piattaforma di **bug bounty premium creata da hacker, per hacker**! Unisciti a noi su [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) oggi e inizia a guadagnare taglie fino a **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## Informazioni di base
**SSH (Secure Shell o Secure Socket Shell)** è un protocollo di rete che consente una connessione sicura a un computer su una rete non sicura. È essenziale per mantenere la riservatezza e l'integrità dei dati durante l'accesso ai sistemi remoti.
**Porta predefinita:** 22
```
22/tcp open ssh syn-ack
```
**Server SSH:**
* [openSSH](http://www.openssh.org) OpenBSD SSH, incluso nelle distribuzioni BSD, Linux e Windows a partire da Windows 10
* [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) Implementazione SSH per ambienti con risorse di memoria e processore limitate, inclusa in OpenWrt
* [PuTTY](https://www.chiark.greenend.org.uk/\~sgtatham/putty/) Implementazione SSH per Windows, il client è comunemente usato ma l'uso del server è più raro
* [CopSSH](https://www.itefix.net/copssh) Implementazione di OpenSSH per Windows
**Librerie SSH (implementazione lato server):**
* [libssh](https://www.libssh.org) Libreria C multi-piattaforma che implementa il protocollo SSHv2 con binding in [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) e [R](https://github.com/ropensci/ssh); utilizzata da KDE per sftp e da GitHub per l'infrastruttura git SSH
* [wolfSSH](https://www.wolfssl.com/products/wolfssh/) Libreria server SSHv2 scritta in ANSI C e mirata a ambienti incorporati, RTOS e con risorse limitate
* [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) La libreria Java Apache SSHD si basa su Apache MINA
* [paramiko](https://github.com/paramiko/paramiko) Libreria Python per il protocollo SSHv2
## Enumerazione
### Banner Grabbing
```bash
nc -vn <IP> 22
```
### Audit automatico di ssh
ssh-audit è uno strumento per l'audit della configurazione del server e del client ssh.
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) è un fork aggiornato da [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
**Caratteristiche:**
* Supporto del server per i protocolli SSH1 e SSH2;
* analisi della configurazione del client SSH;
* acquisizione del banner, riconoscimento del dispositivo o del software e del sistema operativo, rilevamento della compressione;
* raccolta di algoritmi di scambio chiave, chiave host, crittografia e codice di autenticazione del messaggio;
* informazioni sugli algoritmi di output (disponibili da quando, rimossi/disabilitati, non sicuri/deboli/obsoleti, ecc.);
* raccomandazioni sugli algoritmi di output (aggiungi o rimuovi in base alla versione del software riconosciuta);
* informazioni sulla sicurezza di output (problemi correlati, elenco CVE assegnato, ecc.);
* analisi della compatibilità della versione SSH basata sulle informazioni sugli algoritmi;
* informazioni storiche da OpenSSH, Dropbear SSH e libssh;
* funziona su Linux e Windows;
* nessuna dipendenza
```bash
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>
```
### Chiave pubblica SSH del server
[Guarda in azione (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
```bash
ssh-keyscan -t rsa <IP> -p <PORT>
```
### Algoritmi di crittografia deboli
Questo viene scoperto per impostazione predefinita da **nmap**. Ma puoi anche utilizzare **sslcan** o **sslyze**.
### Script di Nmap
```bash
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`
## Forza bruta nomi utente, password e chiavi private
### Enumerazione dei nomi utente
In alcune versioni di OpenSSH è possibile effettuare un attacco temporizzato per enumerare gli utenti. È possibile utilizzare un modulo di metasploit per sfruttare ciò:
```
msf> use scanner/ssh/ssh_enumusers
```
### [Brute force](../generic-methodologies-and-resources/brute-force.md#ssh)
Alcune credenziali ssh comuni [qui](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) e [qui](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) e di seguito.
### Forza Bruta con Chiave Privata
Se conosci alcune chiavi private ssh che potrebbero essere utilizzate... proviamoci. Puoi utilizzare lo script nmap:
```
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
```
O il modulo ausiliario MSF:
```
msf> use scanner/ssh/ssh_identify_pubkeys
```
Oppure utilizzare `ssh-keybrute.py` (python3 nativo, leggero e con algoritmi legacy abilitati): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
#### Chiavi compromesse conosciute possono essere trovate qui:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
#### Chiavi SSH deboli / PRNG prevedibile di Debian
Alcuni sistemi presentano difetti noti nel seme casuale utilizzato per generare materiale crittografico. Ciò può comportare una riduzione drastica dello spazio delle chiavi che può essere oggetto di attacco di forza bruta. Set pre-generati di chiavi generate su sistemi Debian affetti da PRNG debole sono disponibili qui: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
Dovresti cercare qui per cercare chiavi valide per la macchina vittima.
### Kerberos
**crackmapexec** utilizzando il protocollo `ssh` può utilizzare l'opzione `--kerberos` per **autenticarsi tramite kerberos**.\
Per ulteriori informazioni eseguire `crackmapexec ssh --help`.
## Credenziali predefinite
| **Fornitore** | **Nomi utente** | **Password** |
| ------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, device | 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, user | private, admin, user |
| 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
Se ti trovi nella rete locale della vittima che si sta connettendo al server SSH utilizzando nome utente e password, potresti provare a **eseguire un attacco MitM per rubare quelle credenziali:**
**Percorso dell'attacco:**
* **Reindirizzamento del traffico:** L'attaccante **devia** il traffico della vittima verso la propria macchina, intercettando efficacemente il tentativo di connessione al server SSH.
* **Intercettazione e registrazione:** La macchina dell'attaccante agisce come un **proxy**, **catturando** i dettagli di accesso dell'utente fingendo di essere il legittimo server SSH.
* **Esecuzione di comandi e relay:** Infine, il server dell'attaccante **registra le credenziali dell'utente**, **inoltra i comandi** al vero server SSH, li **esegue** e **invia i risultati** all'utente, rendendo il processo apparentemente regolare e legittimo.
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) fa esattamente ciò che è descritto sopra.
Per catturare effettuare il vero MitM potresti utilizzare tecniche come ARP spoofing, DNS spoofing o altre descritte negli [**attacchi di spoofing di rete**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
## SSH-Snake
Se desideri attraversare una rete utilizzando chiavi private SSH scoperte sui sistemi, utilizzando ciascuna chiave privata su ciascun sistema per nuovi host, allora [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) è ciò di cui hai bisogno.
SSH-Snake esegue automaticamente e in modo ricorsivo le seguenti attività:
1. Sul sistema attuale, trova eventuali chiavi private SSH,
2. Sul sistema attuale, trova eventuali host o destinazioni (utente@host) che potrebbero accettare le chiavi private,
3. Prova a connettersi via SSH a tutte le destinazioni utilizzando tutte le chiavi private scoperte,
4. Se una destinazione viene connessa con successo, ripete i passaggi #1 - #4 sul sistema connesso.
È completamente auto-replicante e auto-propagante - e completamente senza file.
## Configurazioni errate della configurazione
### Accesso root
È comune che i server SSH consentano l'accesso dell'utente root per impostazione predefinita, il che costituisce un rischio significativo per la sicurezza. **Disabilitare l'accesso root** è un passaggio critico per proteggere il server. L'accesso non autorizzato con privilegi amministrativi e gli attacchi di forza bruta possono essere mitigati apportando questa modifica.
**Per disabilitare l'accesso root in OpenSSH:**
1. **Modificare il file di configurazione SSH** con: `sudoedit /etc/ssh/sshd_config`
2. **Cambiare l'impostazione** da `#PermitRootLogin yes` a **`PermitRootLogin no`**.
3. **Ricaricare la configurazione** utilizzando: `sudo systemctl daemon-reload`
4. **Riavviare il server SSH** per applicare le modifiche: `sudo systemctl restart sshd`
### Forza bruta SFTP
* [**Forza bruta SFTP**](../generic-methodologies-and-resources/brute-force.md#sftp)
### Esecuzione di comandi SFTP
Si verifica spesso un'oversight comune con le configurazioni SFTP, dove gli amministratori intendono che gli utenti scambino file senza abilitare l'accesso alla shell remota. Nonostante si impostino gli utenti con shell non interattive (ad es. `/usr/bin/nologin`) e li si confini in una directory specifica, rimane una falla di sicurezza. Gli **utenti possono aggirare queste restrizioni** richiedendo l'esecuzione di un comando (come `/bin/bash`) immediatamente dopo il login, prima che la loro shell non interattiva designata prenda il controllo. Ciò consente l'esecuzione non autorizzata di comandi, minando le misure di sicurezza previste.
[Esempio da qui](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
```
Ecco un esempio di configurazione sicura di SFTP (`/etc/ssh/sshd_config` - openSSH) per l'utente `noraj`:
```
Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no
```
Questo settaggio permetterà solo SFTP: disabilitando l'accesso alla shell forzando il comando di avvio e disabilitando l'accesso TTY ma anche disabilitando ogni tipo di inoltro di porta o tunneling.
### Tunneling SFTP
Se hai accesso a un server SFTP, puoi anche instradare il tuo traffico attraverso questo ad esempio utilizzando l'inoltro di porta comune:
```bash
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
```
### SFTP Symlink
Il **sftp** ha il comando "**symlink**". Pertanto, se hai **diritti di scrittura** in una cartella, puoi creare **symlink** di **altre cartelle/file**. Poiché probabilmente sei **intrappolato** all'interno di un chroot, questo **non sarà particolarmente utile** per te, ma se riesci ad **accedere** al **symlink** creato da un **servizio** **senza chroot** (ad esempio, se puoi accedere al symlink dal web), potresti **aprire i file simbolici tramite il web**.
Ad esempio, per creare un **symlink** da un nuovo file **"**_**froot**_**" a "**_**/**_**"**:
```bash
sftp> symlink / froot
```
Se riesci ad accedere al file "_froot_" tramite web, sarai in grado di elencare la cartella root ("/") del sistema.
### Metodi di autenticazione
In ambienti ad alta sicurezza è pratica comune abilitare solo l'autenticazione basata su chiave o a due fattori anziché l'autenticazione basata su password semplice. Tuttavia, spesso i metodi di autenticazione più sicuri vengono abilitati senza disabilitare quelli più deboli. Un caso frequente è abilitare `publickey` nella configurazione di openSSH e impostarlo come metodo predefinito senza disabilitare `password`. Quindi, utilizzando la modalità dettagliata del client SSH, un attaccante può vedere che è abilitato un metodo più debole:
```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
```
Per esempio, se è impostato un limite di fallimento dell'autenticazione e non hai mai la possibilità di raggiungere il metodo della password, puoi utilizzare l'opzione `PreferredAuthentications` per forzare l'uso di questo metodo.
```bash
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
```
È necessario controllare la configurazione del server SSH per verificare che siano autorizzati solo i metodi previsti. Utilizzare la modalità dettagliata sul client può aiutare a vedere l'efficacia della configurazione.
### File di configurazione
```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)
## References
* Puoi trovare guide interessanti su come proteggere SSH in [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)
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**Consiglio per bug bounty**: **iscriviti** a **Intigriti**, una piattaforma premium per **bug bounty creata da hacker, per hacker**! Unisciti a noi su [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) oggi stesso e inizia a guadagnare taglie fino a **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## Comandi Automatici di HackTricks
```
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'
```
<details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details>