Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/megamansec/ssh-snake
Privilege EscalationReconnaissanceNetwork MappingLateral MovementInformation GatheringPost-ExploitationPenetration TestingRed TeamingArchived
GitHubmegamansec/ssh-snake

SSH-Snake

SSH-Snake is a self-propagating, self-replicating, file-less script that automates the post-exploitation task of SSH private key and host discovery.

Voir le dépôtSite web
2.3k221il y a 4 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

SSH-Snake : Traversée automatisée de réseau basée sur SSH

🐍 SSH-Snake est un outil puissant conçu pour effectuer une traversée automatique du réseau en utilisant les clés privées SSH découvertes sur les systèmes, dans le but de créer une carte complète d'un réseau et de ses dépendances, identifiant dans quelle mesure un réseau peut être compromis en utilisant SSH et les clés privées SSH à partir d'un système particulier.

SSH-Snake peut automatiquement révéler les relations entre les systèmes connectés via SSH, ce qui prendrait normalement un temps et un effort considérables pour être effectué manuellement.

En d'autres termes, SSH-Snake effectue automatiquement et récursivement les tâches suivantes :

  1. Sur le système actuel, trouver toutes les clés privées SSH,
  2. Sur le système actuel, trouver tous les hôtes ou destinations (user@host) pour lesquels les clés privées pourraient être acceptées,
  3. Essayer de se connecter en SSH à toutes les destinations en utilisant toutes les clés privées découvertes,
  4. Si une connexion à une destination réussit, répéter les étapes #1 à #4 sur le système connecté.

Il est totalement auto-réplicatif et auto-propageant -- et complètement sans fichier. À bien des égards, SSH-Snake est en fait un ver : il se réplique et se propage d'un système à un autre aussi loin que possible.

Au lieu de sauter manuellement entre les systèmes avec des clés SSH comme dans un jeu Super Mario, laissez SSH-Snake faire le travail à votre place.

Bien que cet outil soit destiné à des fins de piratage, les administrateurs système peuvent également l'utiliser pour mieux comprendre leur infrastructure et leur réseau. Si vous souhaitez désactiver l'affichage des clés privées découvertes, commentez cette ligne de code.

Pour un examen approfondi du fonctionnement réel de ce script, des détails techniques, des découvertes intéressantes, des décisions de conception, des benchmarks et des leçons apprises, consultez cet article de blog. Ce logiciel a été écrit par Joshua Rogers.

Screenshots

Une capture d'écran réduite de la sortie de SSH-Snake dans un très petit réseau.

A graph visualizing the relation between systems using SSHLes nœuds bleus indiquent que la destination peut se connecter à elle-même (user@host<-->user@host). Les arêtes rouges indiquent que la connexion est bidirectionnelle (user1@host1<-->user2@host2).

A graph visualizing the relation between systems using SSHLes nœuds verts indiquent un hôte (sans nom d'utilisateur) qui peut se connecter à lui-même (host1<-->host1). Les arêtes vertes indiquent que la connexion est bidirectionnelle (host1<-->host2). L'hôte gris dans le coin supérieur droit est l'hôte sur lequel le script a été initialement exécuté.

A graph visualizing the relation between systems using SSHLes nœuds bleus indiquent que la destination peut se connecter à elle-même (user@host<-->user@host). Les arêtes rouges indiquent que la connexion est bidirectionnelle (user1@host1<-->user2@host2).

Utilisation et exécution de SSH-Snake

SSH-Snake peut être téléchargé ou redirigé vers bash :

root@kitploit:~
wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
bash ./Snake.nocomments.sh

ou

root@kitploit:~
curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | bash

À propos de SSH-Snake

SSH-Snake émule de manière transparente ce qu'un adversaire humain ferait pour découvrir les clés privées SSH et les destinations où elles peuvent être utilisées pour se connecter. Entièrement écrit en Bash, il fonctionne avec un ensemble minimal de dépendances généralement disponibles sur les principaux systèmes Linux (et MacOS) : bash, ssh, coreutils, awk, uniq, sort, grep, tr, find et cat. getent OU dscacheutil est requis. sed n'est requis que pour le tout premier système. De même, sudo, hostname, ip, timeout, arp, ifconfig, ipconfig et xargs peuvent également être utilisés, mais ils ne sont pas requis (et le script gère gracieusement les cas où ils ne sont pas présents). Si un système est découvert sans aucun des paquets requis, il échoue gracieusement, alertant l'utilisateur que l'analyse n'a pas pu continuer sur ce système particulier (et fait marche arrière, continuant à partir du système précédent.)

SSH-Snake est totalement sans fichier : après que l'utilisateur a exécuté le script, il est passé au bash des destinations via stdin et les arguments bash (via SSH). Aucune trace matérielle du script n'existe sur aucun des systèmes scannés : la seule preuve de l'exécution du script est dans l'arbre des processus et le nombre substantiel de tentatives SSH invalides qui se produiront inévitablement.

SSH-Snake adopte une approche en profondeur d'abord pour la découverte : une fois qu'il se connecte à un système, il essaie de se connecter plus loin à partir de ce système avant de faire marche arrière.

Le nom SSH-Snake vient du fait que la sortie du script ressemble à un serpent qui serpente de haut en bas du réseau. Cependant, contrairement au jeu Snake, SSH-Snake ne mourra pas lorsqu'il se mord la queue (se connecte à un système qu'il a déjà scanné ou qu'il est en train de scanner) : il affichera simplement comment il s'est connecté là-bas normalement, mais reviendra et ne re-scannera pas la destination (afin d'éviter une récursion infinie).

SSH-Snake a été testé sur diverses distributions Linux et MacOS (avec Homebrew Bash installé). Si vous rencontrez un système d'exploitation basé sur Linux avec lequel il n'est pas compatible, veuillez soumettre un rapport.

Fonctionnalités

  • SSH récursif d'un système à un autre en utilisant les clés privées SSH locales,
  • Traversée et propagation/réplication sans fichier du script SSH-Snake en utilisant uniquement stdin et les arguments bash vers les systèmes distants,
  • Élévation automatique des privilèges vers root via sudo si possible,
  • Découverte des fichiers de clés privées SSH à partir des entrées .bash_history,
  • Découverte des clés privées SSH à partir de fichiers et dossiers couramment utilisés,
  • Exfiltration des clés privées SSH en sortie du script,
  • Exécution de commandes personnalisées configurables sur chaque système,
  • Système modulaire plug-and-play pour découvrir les clés privées et les systèmes,
  • Détection des hôtes à partir de plages IP, dernières connexions, hôtes connus, fichiers de configuration SSH, etc.,
  • Capacité à détecter quand un système a déjà été scanné ou est en cours de scan, de sorte qu'un réseau comme A->B->C puisse également découvrir C->A mais ne régresse pas vers A->B->C-A->B->C->A->B->....,
  • Capacité à générer des visualisations graphiques d'un réseau à partir de la sortie du script,
  • ... et plus encore.

Paramètres

SSH-Snake est fourni avec certains paramètres généraux qui peuvent être configurés. Ces paramètres sont documentés dans SETTINGS.md#general-settings.

SSH-Snake est également livré avec une variété de stratégies configurables/plug-and-play (fonctions) qui peuvent être utilisées pour découvrir les clés privées SSH sur un système et découvrir les hôtes et destinations auxquels tenter de se connecter. Des valeurs par défaut raisonnables ont été fournies, cependant si vous souhaitez effectuer une analyse aussi complète que possible, l'activation de techniques de découverte supplémentaires peut aider. Si une analyse prend beaucoup de temps, la désactivation de certaines techniques de découverte peut aider. À l'exception d'une stratégie (find_ssh_keys), chacune des stratégies peut être activée/désactivée. Ces stratégies sont documentées dans SETTINGS.md#configurable-discovery-strategies.

Comprendre la sortie

La sortie brute de SSH-Snake contient un mélange d'informations sur les clés privées découvertes, les destinations et les messages d'erreur.

Une explication détaillée de la sortie complète de SSH-Snake se trouve dans OUTPUT.md.

Un exemple de sortie se trouve dans example-output.log.

Visualisation des relations entre systèmes

La sortie de SSH-Snake peut être utilisée pour créer des graphiques/visualisations du réseau que le script traverse.

Une explication détaillée sur la façon de créer et d'interpréter des images/visualisations à partir de la sortie de SSH-Snake se trouve dans GRAPHICS.md.

Autres outils

En plus de la capacité de créer des visualisations du réseau que SSH-Snake traverse, trois autres outils sont fournis. À savoir :

  1. forward-lookup-host.py : À partir d'un hôte source ou d'une destination, déterminer tous les systèmes accessibles directement ou indirectement (c'est-à-dire via un système tertiaire).
  2. reverse-lookup-host.py : À partir d'un hôte ou d'une destination cible, déterminer tous les systèmes qui peuvent y accéder directement ou indirectement.
  3. shortest-path-create-chain.py : À partir d'un hôte ou d'une destination A et B, déterminer le chemin le plus court reliant les deux.

Le troisième outil génère également une commande qui peut être utilisée pour se connecter de la destination A à la destination B. Par exemple :

root@kitploit:~
$ python3 tools/shortest-path-create-chain.py --file output.log --src '[email protected]' --dest '[email protected]'

Shortest path from [email protected] to [email protected]: [email protected]>[email protected]>[email protected]>[email protected]

[..]

ssh -i "/home/jrogers/.ssh/key" [email protected] 'sudo ssh -i "/root/.ssh/id_rsa" [email protected] 'ssh -i "/tmp/key" [email protected]''

Snake.sh vs Snake.nocomments.sh

Étant donné que le script est assez volumineux, le charger dans un here-document (ce qu'il fait automatiquement car le script est en fait un Quine) fait écrire bash dans un fichier temporaire (car il dépasse 65535 octets).

Pour réduire la taille afin qu'il reste 100% sans fichier, Snake.nocomments.sh propose une version avec tous les commentaires, les espaces inutiles et les lignes vides supprimés. Cela réduit la taille du fichier de sorte que le fichier temporaire n'est pas créé par bash.

Bogues / Problèmes

Si vous rencontrez des bogues ou des problèmes liés au script, veuillez les signaler sous forme de problème GitHub. Veuillez inclure vos paramètres de configuration.

Je suis particulièrement intéressé par toute sortie [line] intéressante associée à des erreurs qui n'ont pas été interceptées par le script.

Limites

  • IPv4 uniquement : Comme tous les meilleurs programmes, le script ne prend pas en charge IPv6. Je n'imagine pas qu'un support sera ajouté de sitôt.

  • Port 22 uniquement : Il est généralement supposé que SSH fonctionne sur le port 22.

  • GNU coreutils : Le script dépend fortement de GNU coreutils. Je n'ai pas déterminé dans quelle mesure (si c'est le cas) des fonctionnalités GNU sont utilisées dans le script.

  • Le script ne recherche pas actuellement les sockets de l'agent SSH.

Télécharger l’outil