mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
264 lines
15 KiB
Markdown
264 lines
15 KiB
Markdown
# 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.
|
||
|
||
.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" <target>
|
||
|
||
braa <community string>@<IP>:.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 <IP> 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}}
|