# 161,162,10161,10162/udp - Pentesting SNMP {{#include ../../banners/hacktricks-training.md}} ## Informations de base **SNMP - Simple Network Management Protocol** est un protocole utilisé pour surveiller différents appareils dans le réseau (comme les routeurs, les commutateurs, les imprimantes, les IoT...). ``` PORT STATE SERVICE REASON VERSION 161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public) ``` > [!NOTE] > SNMP utilise également le port **162/UDP** pour les **traps**. Ce sont des **paquets de données envoyés du serveur SNMP au client sans être explicitement demandés**. ### MIB Pour garantir que l'accès SNMP fonctionne entre différents fabricants et avec différentes combinaisons client-serveur, la **Management Information Base (MIB)** a été créée. La MIB est un **format indépendant pour stocker les informations sur les appareils**. Une MIB est un **fichier texte** dans lequel tous les **objets SNMP** interrogeables d'un appareil sont listés dans une hiérarchie d'arbre **standardisée**. Elle contient au **moins un `Object Identifier` (`OID`)**, qui, en plus de l'**adresse unique** nécessaire et d'un **nom**, fournit également des informations sur le type, les droits d'accès et une description de l'objet respectif.\ Les fichiers MIB sont écrits dans le format texte ASCII basé sur la `Abstract Syntax Notation One` (`ASN.1`). Les **MIB ne contiennent pas de données**, mais elles expliquent **où trouver quelles informations** et à quoi elles ressemblent, quelles valeurs sont retournées pour l'OID spécifique, ou quel type de données est utilisé. ### OIDs Les **Object Identifiers (OIDs)** jouent un rôle crucial. Ces identifiants uniques sont conçus pour gérer des objets au sein d'une **Management Information Base (MIB)**. Les niveaux les plus élevés des ID d'objet MIB, ou OIDs, sont attribués à diverses organisations de normalisation. C'est au sein de ces niveaux supérieurs que le cadre pour les pratiques et normes de gestion mondiales est établi. De plus, les fournisseurs ont la liberté d'établir des branches privées. Au sein de ces branches, ils ont l'**autonomie d'inclure des objets gérés pertinents à leurs propres gammes de produits**. Ce système garantit qu'il existe une méthode structurée et organisée pour identifier et gérer une large gamme d'objets à travers différents fournisseurs et normes. ![](<../../images/SNMP_OID_MIB_Tree (1).png>) Vous pouvez **naviguer** à travers un **arbre OID** sur le web ici : [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ou **voir ce que signifie un OID** (comme `1.3.6.1.2.1.1`) en accédant à [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ Il existe des **OID bien connus** comme ceux à l'intérieur de [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) qui font référence aux variables du Simple Network Management Protocol (SNMP) définies par MIB-2. Et à partir des **OID en attente de celui-ci**, vous pouvez obtenir des données intéressantes sur l'hôte (données système, données réseau, données de processus...) ### **Exemple d'OID** [**Exemple d'ici**](https://www.netadmintools.com/snmp-mib-and-oids/): **`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`** Voici une explication de cette adresse. - 1 – cela s'appelle l'ISO et cela établit qu'il s'agit d'un OID. C'est pourquoi tous les OID commencent par "1" - 3 – cela s'appelle ORG et il est utilisé pour spécifier l'organisation qui a construit l'appareil. - 6 – c'est le dod ou le Département de la Défense qui est l'organisation qui a établi Internet en premier. - 1 – c'est la valeur de l'internet pour indiquer que toutes les communications se feront via Internet. - 4 – cette valeur détermine que cet appareil est fabriqué par une organisation privée et non par une organisation gouvernementale. - 1 – cette valeur indique que l'appareil est fabriqué par une entreprise ou une entité commerciale. Ces six premières valeurs tendent à être les mêmes pour tous les appareils et elles vous donnent les informations de base à leur sujet. Cette séquence de chiffres sera la même pour tous les OID, sauf lorsque l'appareil est fabriqué par le gouvernement. Passons à l'ensemble suivant de chiffres. - 1452 – donne le nom de l'organisation qui a fabriqué cet appareil. - 1 – explique le type d'appareil. Dans ce cas, c'est un réveil. - 2 – détermine que cet appareil est une unité terminale à distance. Le reste des valeurs donne des informations spécifiques sur l'appareil. - 5 – désigne un point d'alarme discret. - 1 – point spécifique dans l'appareil - 3 – port - 21 – adresse du port - 1 – affichage pour le port - 4 – numéro de point - 7 – état du point ### Versions SNMP Il existe 2 versions importantes de SNMP : - **SNMPv1** : La principale, c'est encore la plus fréquente, l'**authentification est basée sur une chaîne** (chaîne de communauté) qui circule en **texte clair** (toutes les informations circulent en texte clair). **La version 2 et 2c** envoient également le **trafic en texte clair** et utilisent une **chaîne de communauté comme authentification**. - **SNMPv3** : Utilise une meilleure forme d'**authentification** et les informations circulent **chiffrées** (une **attaque par dictionnaire** pourrait être effectuée mais il serait beaucoup plus difficile de trouver les bonnes informations d'identification que dans SNMPv1 et v2). ### Chaînes de communauté Comme mentionné précédemment, **pour accéder aux informations enregistrées sur la MIB, vous devez connaître la chaîne de communauté pour les versions 1 et 2/2c et les identifiants pour la version 3.**\ Il existe **2 types de chaînes de communauté** : - **`public`** principalement des fonctions **en lecture seule** - **`private`** **Lecture/Écriture** en général Notez que **la possibilité d'écriture d'un OID dépend de la chaîne de communauté utilisée**, donc **même** si vous trouvez que "**public**" est utilisé, vous pourriez être en mesure de **modifier certaines valeurs.** De plus, il **peut** exister des objets qui sont **toujours "Lecture seule".**\ Si vous essayez de **modifier** un objet, une erreur **`noSuchName` ou `readOnly` est reçue**. Dans les versions 1 et 2/2c, si vous utilisez une chaîne de communauté **incorrecte**, le serveur ne **répondra pas**. Donc, s'il répond, une **chaîne de communauté valide a été utilisée**. ## Ports [De Wikipedia](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol): - L'agent SNMP reçoit des demandes sur le port UDP **161**. - Le gestionnaire reçoit des notifications ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) et [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) sur le port **162**. - Lorsqu'il est utilisé avec [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) ou [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security), les demandes sont reçues sur le port **10161** et les notifications sont envoyées au port **10162**. ## Brute-Force Community String (v1 et v2c) Pour **deviner la chaîne de communauté**, vous pourriez effectuer une attaque par dictionnaire. Consultez [ici différentes façons d'effectuer une attaque par force brute contre SNMP](../../generic-hacking/brute-force.md#snmp). Une chaîne de communauté fréquemment utilisée est `public`. ## Énumération SNMP Il est recommandé d'installer ce qui suit pour voir ce que signifie **chaque OID recueilli** à partir de l'appareil : ```bash apt-get install snmp-mibs-downloader download-mibs # Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf sudo vi /etc/snmp/snmp.conf ``` Si vous connaissez une chaîne de communauté valide, vous pouvez accéder aux données en utilisant **SNMPWalk** ou **SNMP-Check** : ```bash snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot snmpbulkwalk -c public -v2c 10.10.11.136 . snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] 1.3.6.1.2.1.4.34.1.3 #Get IPv6, needed dec2hex snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] NET-SNMP-EXTEND-MIB::nsExtendObjects #get extended snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] .1 #Enum all snmp-check [DIR_IP] -p [PORT] -c [COMM_STRING] nmap --script "snmp* and not snmp-brute" braa @:.1.3.6.* #Bruteforce specific OID ``` Grâce aux requêtes étendues (download-mibs), il est possible d'énumérer encore plus d'informations sur le système avec la commande suivante : ```bash snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull ``` **SNMP** contient beaucoup d'informations sur l'hôte et les éléments qui peuvent vous intéresser sont : **Interfaces réseau** (adresse **IPv4** et **IPv6**), Noms d'utilisateur, Temps de fonctionnement, Version du serveur/OS, et **processus** **en cours d'exécution** (peut contenir des mots de passe).... ### **Paramètres Dangereux** Dans le domaine de la gestion des réseaux, certaines configurations et paramètres sont essentiels pour garantir une surveillance et un contrôle complets. ### Paramètres d'Accès Deux paramètres principaux permettent d'accéder à l'**arbre OID complet**, qui est un composant crucial de la gestion des réseaux : 1. **`rwuser noauth`** est configuré pour permettre un accès complet à l'arbre OID sans nécessiter d'authentification. Ce paramètre est simple et permet un accès illimité. 2. Pour un contrôle plus spécifique, l'accès peut être accordé en utilisant : - **`rwcommunity`** pour les adresses **IPv4**, et - **`rwcommunity6`** pour les adresses **IPv6**. Les deux commandes nécessitent une **chaîne de communauté** et l'adresse IP pertinente, offrant un accès complet indépendamment de l'origine de la demande. ### Paramètres SNMP pour Microsoft Windows Une série de **valeurs de la Base de Données de Gestion (MIB)** sont utilisées pour surveiller divers aspects d'un système Windows via SNMP : - **Processus Système** : Accédé via `1.3.6.1.2.1.25.1.6.0`, ce paramètre permet de surveiller les processus actifs au sein du système. - **Programmes en Cours d'Exécution** : La valeur `1.3.6.1.2.1.25.4.2.1.2` est désignée pour suivre les programmes actuellement en cours d'exécution. - **Chemin des Processus** : Pour déterminer d'où un processus s'exécute, la valeur MIB `1.3.6.1.2.1.25.4.2.1.4` est utilisée. - **Unités de Stockage** : La surveillance des unités de stockage est facilitée par `1.3.6.1.2.1.25.2.3.1.4`. - **Nom du Logiciel** : Pour identifier le logiciel installé sur un système, `1.3.6.1.2.1.25.6.3.1.2` est employé. - **Comptes Utilisateurs** : La valeur `1.3.6.1.4.1.77.1.2.25` permet de suivre les comptes utilisateurs. - **Ports Locaux TCP** : Enfin, `1.3.6.1.2.1.6.13.1.3` est désigné pour surveiller les ports locaux TCP, fournissant un aperçu des connexions réseau actives. ### Cisco Consultez cette page si vous utilisez du matériel Cisco : {{#ref}} cisco-snmp.md {{#endref}} ## De SNMP à RCE Si vous avez la **chaîne** qui vous permet de **modifier des valeurs** à l'intérieur du service SNMP, vous pourriez être en mesure de l'exploiter pour **exécuter des commandes** : {{#ref}} snmp-rce.md {{#endref}} ## **SNMP Massif** [Braa ](https://github.com/mteg/braa) est un scanner SNMP de masse. L'utilisation prévue d'un tel outil est, bien sûr, de faire des requêtes SNMP – mais contrairement à snmpwalk de net-snmp, il est capable d'interroger des dizaines ou des centaines d'hôtes simultanément, et dans un seul processus. Ainsi, il consomme très peu de ressources système et effectue le scan TRÈS rapidement. Braa implémente sa propre pile SNMP, donc il n'a pas besoin de bibliothèques SNMP comme net-snmp. **Syntaxe :** braa \[Chaîne de communauté]@\[IP du serveur SNMP]:\[id iso] ```bash braa ignite123@192.168.1.125:.1.3.6.* ``` Cela peut extraire beaucoup de Mo d'informations que vous ne pouvez pas traiter manuellement. Alors, cherchons les informations les plus intéressantes (de [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)): ### **Appareils** Le processus commence par l'extraction des données **sysDesc MIB** (1.3.6.1.2.1.1.1.0) de chaque fichier pour identifier les appareils. Cela se fait par l'utilisation d'une **commande grep** : ```bash grep ".1.3.6.1.2.1.1.1.0" *.snmp ``` ### **Identifier la chaîne privée** Une étape cruciale consiste à identifier la **chaîne de communauté privée** utilisée par les organisations, en particulier sur les routeurs Cisco IOS. Cette chaîne permet l'extraction des **configurations en cours** des routeurs. L'identification repose souvent sur l'analyse des données SNMP Trap à la recherche du mot "trap" avec une **commande grep** : ```bash grep -i "trap" *.snmp ``` ### **Noms d'utilisateur/Mots de passe** Les journaux stockés dans les tables MIB sont examinés pour les **tentatives de connexion échouées**, qui pourraient accidentellement inclure des mots de passe saisis en tant que noms d'utilisateur. Des mots-clés tels que _fail_, _failed_, ou _login_ sont recherchés pour trouver des données précieuses : ```bash grep -i "login\|fail" *.snmp ``` ### **Emails** Enfin, pour extraire des **adresses email** des données, une **commande grep** avec une expression régulière est utilisée, en se concentrant sur des motifs qui correspondent aux formats d'email : ```bash grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp ``` ## Modification des valeurs SNMP Vous pouvez utiliser _**NetScanTools**_ pour **modifier des valeurs**. Vous devrez connaître la **chaîne privée** pour ce faire. ## Usurpation S'il existe une ACL qui n'autorise que certaines adresses IP à interroger le service SMNP, vous pouvez usurper l'une de ces adresses à l'intérieur du paquet UDP et renifler le trafic. ## Examiner les fichiers de configuration SNMP - snmp.conf - snmpd.conf - snmp-config.xml ## Commandes automatiques HackTricks ``` Protocol_Name: SNMP #Protocol Abbreviation if there is one. Port_Number: 161 #Comma separated if there is more than one. Protocol_Description: Simple Network Managment Protocol #Protocol Abbreviation Spelled out Entry_1: Name: Notes Description: Notes for SNMP Note: | SNMP - Simple Network Management Protocol is a protocol used to monitor different devices in the network (like routers, switches, printers, IoTs...). https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smtp/index.html Entry_2: Name: SNMP Check Description: Enumerate SNMP Command: snmp-check {IP} Entry_3: Name: OneSixtyOne Description: Crack SNMP passwords Command: onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings-onesixtyone.txt {IP} -w 100 Entry_4: Name: Nmap Description: Nmap snmp (no brute) Command: nmap --script "snmp* and not snmp-brute" {IP} Entry_5: Name: Hydra Brute Force Description: Need Nothing Command: hydra -P {Big_Passwordlist} -v {IP} snmp ``` {{#include ../../banners/hacktricks-training.md}}