# 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 %}