# 22 - Pentesting SSH/SFTP
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** đŹ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** đŠ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
**Bug bounty tip**: **inscrivez-vous** pour **Intigriti**, une **plateforme de bug bounty premium créée par des hackers, pour des hackers** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
{% embed url="https://go.intigriti.com/hacktricks" %}
## Basic Information
**SSH (Secure Shell ou Secure Socket Shell)** est un protocole réseau qui permet une connexion sécurisée à un ordinateur via un réseau non sécurisé. Il est essentiel pour maintenir la confidentialité et l'intégrité des données lors de l'accÚs à des systÚmes distants.
**Port par défaut :** 22
```
22/tcp open ssh syn-ack
```
**Serveurs SSH :**
* [openSSH](http://www.openssh.org) â OpenBSD SSH, inclus dans les distributions BSD, Linux et Windows depuis Windows 10
* [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) â implĂ©mentation SSH pour des environnements avec peu de mĂ©moire et de ressources processeur, inclus dans OpenWrt
* [PuTTY](https://www.chiark.greenend.org.uk/\~sgtatham/putty/) â implĂ©mentation SSH pour Windows, le client est couramment utilisĂ© mais l'utilisation du serveur est plus rare
* [CopSSH](https://www.itefix.net/copssh) â implĂ©mentation d'OpenSSH pour Windows
**BibliothÚques SSH (implémentant cÎté serveur) :**
* [libssh](https://www.libssh.org) â bibliothĂšque C multiplateforme implĂ©mentant le protocole SSHv2 avec des liaisons en [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) et [R](https://github.com/ropensci/ssh); elle est utilisĂ©e par KDE pour sftp et par GitHub pour l'infrastructure git SSH
* [wolfSSH](https://www.wolfssl.com/products/wolfssh/) â bibliothĂšque de serveur SSHv2 Ă©crite en ANSI C et ciblĂ©e pour des environnements embarquĂ©s, RTOS et Ă ressources limitĂ©es
* [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) â bibliothĂšque java Apache SSHD basĂ©e sur Apache MINA
* [paramiko](https://github.com/paramiko/paramiko) â bibliothĂšque de protocole SSHv2 en Python
## ĂnumĂ©ration
### Récupération de banniÚre
```bash
nc -vn 22
```
### Audit ssh automatisé
ssh-audit est un outil pour l'audit de la configuration des serveurs et clients ssh.
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) est un fork mis Ă jour de [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
**Fonctionnalités :**
* Support des protocoles SSH1 et SSH2 ;
* analyser la configuration du client SSH ;
* récupérer la banniÚre, reconnaßtre l'appareil ou le logiciel et le systÚme d'exploitation, détecter la compression ;
* rassembler les algorithmes d'échange de clés, de clé hÎte, de chiffrement et de code d'authentification de message ;
* afficher les informations sur les algorithmes (disponible depuis, supprimé/désactivé, non sécurisé/faible/ancien, etc.) ;
* afficher les recommandations sur les algorithmes (ajouter ou supprimer en fonction de la version du logiciel reconnue) ;
* afficher les informations de sécurité (problÚmes liés, liste CVE assignée, etc.) ;
* analyser la compatibilité des versions SSH en fonction des informations sur les algorithmes ;
* informations historiques d'OpenSSH, Dropbear SSH et libssh ;
* fonctionne sur Linux et Windows ;
* aucune dépendance
```bash
usage: ssh-audit.py [-1246pbcnjvlt]
-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 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= minimum output level (info|warn|fail)
-t, --timeout= timeout (in seconds) for connection and reading
(default: 5)
$ python3 ssh-audit
```
[Voir en action (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
### Clé SSH publique du serveur
```bash
ssh-keyscan -t rsa -p
```
### Algorithmes de chiffrement faibles
Cela est découvert par défaut par **nmap**. Mais vous pouvez également utiliser **sslcan** ou **sslyze**.
### Scripts Nmap
```bash
nmap -p22 -sC # Send default nmap scripts for SSH
nmap -p22 -sV # Retrieve version
nmap -p22 --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys
nmap -p22 --script ssh-auth-methods --script-args="ssh.user=root" # Check authentication methods
```
### Shodan
* `ssh`
## Force brute les noms d'utilisateur, mots de passe et clés privées
### ĂnumĂ©ration des noms d'utilisateur
Dans certaines versions d'OpenSSH, vous pouvez effectuer une attaque par temporisation pour énumérer les utilisateurs. Vous pouvez utiliser un module Metasploit pour exploiter cela :
```
msf> use scanner/ssh/ssh_enumusers
```
### [Brute force](../generic-methodologies-and-resources/brute-force.md#ssh)
Quelques identifiants ssh courants [ici](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) et [ici](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) et ci-dessous.
### Force brute de la clé privée
Si vous connaissez certaines clĂ©s privĂ©es ssh qui pourraient ĂȘtre utilisĂ©es... essayons. Vous pouvez utiliser le script nmap :
```
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
```
Ou le module auxiliaire MSF :
```
msf> use scanner/ssh/ssh_identify_pubkeys
```
Or utilisez `ssh-keybrute.py` (python3 natif, léger et avec des algorithmes hérités activés) : [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
#### Des clĂ©s connues comme mauvaises peuvent ĂȘtre trouvĂ©es ici :
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
#### Clés SSH faibles / PRNG prévisible Debian
Certains systĂšmes ont des dĂ©fauts connus dans la graine alĂ©atoire utilisĂ©e pour gĂ©nĂ©rer du matĂ©riel cryptographique. Cela peut entraĂźner une rĂ©duction dramatique de l'espace des clĂ©s qui peut ĂȘtre bruteforcĂ©. Des ensembles de clĂ©s prĂ©-gĂ©nĂ©rĂ©es gĂ©nĂ©rĂ©es sur des systĂšmes Debian affectĂ©s par un PRNG faible sont disponibles ici : [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
Vous devriez regarder ici pour rechercher des clés valides pour la machine victime.
### Kerberos
**crackmapexec** utilisant le protocole `ssh` peut utiliser l'option `--kerberos` pour **s'authentifier via kerberos**.\
Pour plus d'infos, exécutez `crackmapexec ssh --help`.
## Identifiants par défaut
| **Fournisseur** | **Noms d'utilisateur** | **Mots de passe** |
| ---------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 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
Si vous ĂȘtes sur le rĂ©seau local en tant que victime qui va se connecter au serveur SSH en utilisant un nom d'utilisateur et un mot de passe, vous pourriez essayer de **rĂ©aliser une attaque MitM pour voler ces identifiants :**
**Chemin d'attaque :**
* **Redirection de trafic :** L'attaquant **détourne** le trafic de la victime vers sa machine, interceptant ainsi **la tentative de connexion** au serveur SSH.
* **Interception et journalisation :** La machine de l'attaquant agit comme un **proxy**, **capturant** les dĂ©tails de connexion de l'utilisateur en prĂ©tendant ĂȘtre le serveur SSH lĂ©gitime.
* **Exécution de commandes et relais :** Enfin, le serveur de l'attaquant **enregistre les identifiants de l'utilisateur**, **transmet les commandes** au véritable serveur SSH, **les exécute**, et **renvoie les résultats** à l'utilisateur, rendant le processus apparemment fluide et légitime.
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) fait exactement ce qui est décrit ci-dessus.
Pour capturer et réaliser le MitM réel, vous pourriez utiliser des techniques comme le spoofing ARP, le spoofing DNS ou d'autres décrites dans les [**attaques de spoofing réseau**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
## SSH-Snake
Si vous souhaitez traverser un réseau en utilisant des clés privées SSH découvertes sur des systÚmes, en utilisant chaque clé privée sur chaque systÚme pour de nouveaux hÎtes, alors [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) est ce dont vous avez besoin.
SSH-Snake effectue automatiquement et de maniÚre récursive les tùches suivantes :
1. Sur le systÚme actuel, trouvez toutes les clés privées SSH,
2. Sur le systÚme actuel, trouvez tous les hÎtes ou destinations (user@host) que les clés privées peuvent accepter,
3. Essayez de SSH dans toutes les destinations en utilisant toutes les clés privées découvertes,
4. Si une destination est connectée avec succÚs, répétez les étapes #1 - #4 sur le systÚme connecté.
C'est complÚtement auto-réplicant et auto-propagant -- et complÚtement sans fichier.
## Mauvaises configurations de configuration
### Connexion root
Il est courant que les serveurs SSH permettent la connexion de l'utilisateur root par dĂ©faut, ce qui pose un risque de sĂ©curitĂ© significatif. **DĂ©sactiver la connexion root** est une Ă©tape critique pour sĂ©curiser le serveur. L'accĂšs non autorisĂ© avec des privilĂšges administratifs et les attaques par force brute peuvent ĂȘtre attĂ©nuĂ©s en effectuant ce changement.
**Pour désactiver la connexion root dans OpenSSH :**
1. **Ăditez le fichier de configuration SSH** avec : `sudoedit /etc/ssh/sshd_config`
2. **Changez le paramĂštre** de `#PermitRootLogin yes` Ă **`PermitRootLogin no`**.
3. **Rechargez la configuration** en utilisant : `sudo systemctl daemon-reload`
4. **Redémarrez le serveur SSH** pour appliquer les changements : `sudo systemctl restart sshd`
### Force brute SFTP
* [**Force brute SFTP**](../generic-methodologies-and-resources/brute-force.md#sftp)
### Exécution de commandes SFTP
Il y a une nĂ©gligence courante qui se produit avec les configurations SFTP, oĂč les administrateurs ont l'intention que les utilisateurs Ă©changent des fichiers sans activer l'accĂšs shell Ă distance. MalgrĂ© le fait de configurer les utilisateurs avec des shells non interactifs (par exemple, `/usr/bin/nologin`) et de les confiner Ă un rĂ©pertoire spĂ©cifique, une faille de sĂ©curitĂ© demeure. **Les utilisateurs peuvent contourner ces restrictions** en demandant l'exĂ©cution d'une commande (comme `/bin/bash`) immĂ©diatement aprĂšs s'ĂȘtre connectĂ©s, avant que leur shell non interactif dĂ©signĂ© ne prenne le relais. Cela permet l'exĂ©cution non autorisĂ©e de commandes, sapant les mesures de sĂ©curitĂ© prĂ©vues.
[Exemple d'ici](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
```
Voici un exemple de configuration SFTP sĂ©curisĂ©e (`/etc/ssh/sshd_config` â openSSH) pour l'utilisateur `noraj` :
```
Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no
```
Cette configuration n'autorisera que SFTP : désactivation de l'accÚs shell en forçant la commande de démarrage et désactivation de l'accÚs TTY, mais aussi désactivation de tout type de transfert de port ou de tunneling.
### SFTP Tunneling
Si vous avez accĂšs Ă un serveur SFTP, vous pouvez Ă©galement faire passer votre trafic Ă travers celui-ci, par exemple en utilisant le transfert de port commun :
```bash
sudo ssh -L :: -N -f @
```
### SFTP Symlink
Le **sftp** a la commande "**symlink**". Par consĂ©quent, si vous avez des **droits d'Ă©criture** dans un dossier, vous pouvez crĂ©er des **symlinks** d'**autres dossiers/fichiers**. Comme vous ĂȘtes probablement **piĂ©gĂ©** dans un chroot, cela **ne sera pas particuliĂšrement utile** pour vous, mais, si vous pouvez **accĂ©der** au **symlink** crĂ©Ă© depuis un **service** **no-chroot** (par exemple, si vous pouvez accĂ©der au symlink depuis le web), vous pourriez **ouvrir les fichiers liĂ©s par le symlink via le web**.
Par exemple, pour créer un **symlink** d'un nouveau fichier **"**_**froot**_**" vers "**_**/**_**"**:
```bash
sftp> symlink / froot
```
If you can access the file "_froot_" via web, you will be able to list the root ("/") folder of the system.
### MĂ©thodes d'authentification
Dans un environnement à haute sécurité, il est courant d'activer uniquement l'authentification par clé ou l'authentification à deux facteurs plutÎt que l'authentification simple par mot de passe. Mais souvent, les méthodes d'authentification plus fortes sont activées sans désactiver les plus faibles. Un cas fréquent est l'activation de `publickey` dans la configuration openSSH et son paramétrage comme méthode par défaut sans désactiver `password`. Ainsi, en utilisant le mode verbeux du client SSH, un attaquant peut voir qu'une méthode plus faible est activée :
```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
```
Par exemple, si une limite d'échec d'authentification est définie et que vous n'avez jamais la chance d'atteindre la méthode de mot de passe, vous pouvez utiliser l'option `PreferredAuthentications` pour forcer l'utilisation de cette méthode.
```bash
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
```
Revoir la configuration du serveur SSH est nécessaire pour vérifier que seules les méthodes attendues sont autorisées. Utiliser le mode verbeux sur le client peut aider à voir l'efficacité de la configuration.
### Config files
```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)
## Références
* Vous pouvez trouver des guides intéressants sur la façon de sécuriser SSH dans [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)
**Astuce bug bounty** : **inscrivez-vous** sur **Intigriti**, une **plateforme de bug bounty premium créée par des hackers, pour des hackers** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des récompenses allant jusqu'à **100 000 $** !
{% embed url="https://go.intigriti.com/hacktricks" %}
## Commandes Automatiques 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'
```
{% hint style="success" %}
Apprenez et pratiquez le Hacking AWS :[**HackTricks Formation Expert Red Team AWS (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Apprenez et pratiquez le Hacking GCP : [**HackTricks Formation Expert Red Team GCP (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Soutenir HackTricks
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
* **Rejoignez le** đŹ [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** đŠ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépÎts github.
{% endhint %}