hacktricks/network-services-pentesting/pentesting-snmp/README.md

298 lines
18 KiB
Markdown
Raw Normal View History

# 161,162,10161,10162/udp - Pentesting SNMP
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres façons de soutenir HackTricks:
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-04-30 20:31:18 +00:00
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
{% embed url="https://www.stmcyber.com/careers" %}
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
## 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 objets IoT...).
```
PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
```
2022-10-02 21:10:53 +00:00
{% hint style="info" %}
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**.
2022-10-02 21:10:53 +00:00
{% endhint %}
2022-05-07 13:38:40 +00:00
### MIB
Pour garantir que l'accès SNMP fonctionne entre les fabricants et avec différentes combinaisons client-serveur, la **Base d'Information de Gestion (MIB)** a été créée. La MIB est un **format indépendant pour stocker les informations des appareils**. Une MIB est un fichier **textuel** dans lequel tous les **objets SNMP interrogeables** d'un appareil sont répertoriés dans une hiérarchie d'arborescence **standardisée**. Elle contient au **moins un `Identifiant d'Objet` (`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 `Notation de Syntaxe Abstraite Un` (`ASN.1`). Les **MIB ne contiennent pas de données**, mais ils expliquent **où trouver quelles informations** et à quoi elles ressemblent, renvoyant des valeurs pour l'OID spécifique, ou quel type de données est utilisé.
2022-05-07 13:38:40 +00:00
### OIDs
Les **Identifiants d'Objet (OID)** jouent un rôle crucial. Ces identifiants uniques sont conçus pour gérer les objets au sein d'une **Base d'Information de Gestion (MIB)**.
Les niveaux les plus élevés des ID d'objet MIB, ou OIDs, sont alloués à diverses organisations de normalisation. C'est à l'intérieur de ces niveaux supérieurs que le cadre des pratiques et normes de gestion mondiales est établi.
De plus, les fournisseurs se voient accorder la liberté d'établir des branches privées. À l'intérieur de ces branches, ils ont l'**autonomie d'inclure des objets gérés pertinents pour 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.
![](../../.gitbook/assets/snmp_oid_mib_tree.png)
Vous pouvez **naviguer** à travers un **arbre OID** depuis 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 quelques **OIDs 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 SNMP définies par MIB-2. Et à partir des **OIDs en attente de celui-ci**, vous pouvez obtenir des données hôte intéressantes (données système, données réseau, données de processus...)
2023-06-03 13:10:46 +00:00
### **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 décomposition de cette adresse.
* 1 - c'est appelé l'ISO et cela établit qu'il s'agit d'un OID. C'est pourquoi tous les OIDs commencent par "1"
* 3 - c'est appelé 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 gouvernementale.
* 1 - cette valeur indique que l'appareil est fabriqué par une entreprise ou une entité commerciale.
Ces six premières valeurs ont tendance à être les mêmes pour tous les appareils et elles vous donnent des informations de base sur eux. Cette séquence de nombres sera la même pour tous les OIDs, sauf lorsque l'appareil est fabriqué par le gouvernement.
Passons aux prochains 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é de terminal à distance.
2023-06-03 13:10:46 +00:00
Le reste des valeurs donne des informations spécifiques sur l'appareil.
* 5 - indique 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
2023-06-03 13:10:46 +00:00
### Versions SNMP
2023-06-03 13:10:46 +00:00
Il existe 2 versions importantes de SNMP :
* **SNMPv1** : La principale, c'est toujours la plus fréquente, l'**authentification est basée sur une chaîne** (chaîne de communauté) qui voyage en **texte clair** (toutes les informations voyagent 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 voyagent **chiffrées** (une **attaque par dictionnaire** pourrait être effectuée mais il serait beaucoup plus difficile de trouver les bons identifiants 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é sur les versions 1 et 2/2c et les identifiants sur la version 3.**\
Il existe **2 types de chaînes de communauté** :
2023-06-03 13:10:46 +00:00
* **`public`** principalement des fonctions **en lecture seule**
* **`private`** **Lecture/Écriture** en général
Notez que **la possibilité d'écrire un OID dépend de la chaîne de communauté utilisée**, donc **même** si vous découvrez que "**public**" est utilisé, vous pourriez être en mesure d'**écrire certaines valeurs**. De plus, il **peut** exister des objets qui sont **toujours "En Lecture Seule"**.\
Si vous essayez d'**écrire** un objet, une erreur **`noSuchName` ou `readOnly`** est reçue\*\*.\*\*
Dans les versions 1 et 2/2c, si vous utilisez une **mauvaise** chaîne de communauté, le serveur ne **répondra** pas. Donc, s'il répond, une **chaîne de communauté valide a été utilisée**.
2022-05-07 13:38:40 +00:00
## 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 sur le port **10162**.
## Attaque par Force Brute de la Chaîne de Communauté (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-methodologies-and-resources/brute-force.md#snmp). Une chaîne de communauté fréquemment utilisée est `public`.
2023-06-03 13:10:46 +00:00
## Énumération SNMP
Il est recommandé d'installer ce qui suit pour voir ce que signifie **chaque OID collecté** à partir de l'appareil:
```bash
apt-get install snmp-mibs-downloader
download-mibs
2022-06-08 11:20:23 +00:00
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf
```
Si vous connaissez une chaîne communautaire valide, vous pouvez accéder aux données en utilisant **SNMPWalk** ou **SNMP-Check** :
```bash
2022-06-08 11:20:23 +00:00
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .
2022-10-02 21:10:53 +00:00
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
2021-06-21 22:18:24 +00:00
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
2022-10-02 21:10:53 +00:00
snmp-check [DIR_IP] -p [PORT] -c [COMM_STRING]
2022-10-02 21:10:53 +00:00
nmap --script "snmp* and not snmp-brute" <target>
2022-10-02 21:10:53 +00:00
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
```
Grâce aux requêtes étendues (download-mibs), il est possible d'en savoir encore plus 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 des éléments qui pourraient vous intéresser sont : **Interfaces réseau** (adresse IPv4 et **IPv6**), Noms d'utilisateur, Temps de fonctionnement, Version du serveur/Système d'exploitation, et **processus** en cours d'exécution (pouvant contenir des mots de passe)....
### **Paramètres Dangereux**
Dans le domaine de la gestion réseau, 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 l'accès à l'**arborescence OID complète**, élément crucial de la gestion réseau :
2022-10-02 21:10:53 +00:00
1. **`rwuser noauth`** est défini pour autoriser un accès complet à l'arborescence 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 communautaire** et l'adresse IP correspondante, 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 Base d'Information de Gestion (MIB)** sont utilisées pour surveiller divers aspects d'un système Windows via SNMP :
* **Processus Système** : Accessible via `1.3.6.1.2.1.25.1.6.0`, ce paramètre permet de surveiller les processus actifs dans le 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 est lancé, 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 utilisé.
* **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.
2022-09-30 10:43:59 +00:00
### Cisco
Consultez cette page si vous utilisez du matériel Cisco :
2022-09-30 10:43:59 +00:00
{% content-ref url="cisco-snmp.md" %}
[cisco-snmp.md](cisco-snmp.md)
{% endcontent-ref %}
2023-06-03 13:10:46 +00:00
## De SNMP à RCE
2021-04-19 17:04:40 +00:00
Si vous avez la **chaîne** qui vous permet d'**écrire des valeurs** dans le service SNMP, vous pourriez l'exploiter pour **exécuter des commandes** :
2021-04-19 17:04:40 +00:00
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
2021-04-19 17:04:40 +00:00
## **SNMP Massif**
[Braa ](https://github.com/mteg/braa)est un scanner SNMP massif. L'objectif d'un tel outil est bien sûr de réaliser 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 ce dans un seul processus. Ainsi, il consomme très peu de ressources système et effectue le balayage TRÈS rapidement.
Braa implémente sa PROPRE pile SNMP, il n'a donc pas besoin de bibliothèques SNMP telles que net-snmp.
**Syntaxe :** braa \[Chaîne communautaire]@\[IP du serveur SNMP]:\[identifiant iso]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
2023-06-03 13:10:46 +00:00
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 est accompli grâce à 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 communautaire privée** utilisée par les organisations, en particulier sur les routeurs Cisco IOS. Cette chaîne permet l'extraction des **configurations en cours d'exécution** des routeurs. L'identification repose souvent sur l'analyse des données de **trap SNMP** pour le 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 inclure accidentellement 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 les **adresses e-mail** des données, une commande **grep** avec une expression régulière est utilisée, en se concentrant sur les motifs correspondant aux formats d'e-mail :
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
2023-06-03 13:10:46 +00:00
## Modification des valeurs SNMP
Vous pouvez utiliser _**NetScanTools**_ pour **modifier les valeurs**. Vous devrez connaître la **chaîne privée** pour le faire.
## Spoofing
S'il existe une ACL qui autorise uniquement certaines adresses IP à interroger le service SMNP, vous pouvez usurper l'une de ces adresses à l'intérieur du paquet UDP et intercepter le trafic.
## Examiner les fichiers de configuration SNMP
* snmp.conf
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
{% embed url="https://www.stmcyber.com/careers" %}
2023-06-03 13:10:46 +00:00
## Commandes automatiques HackTricks
```
2021-08-12 13:34:46 +00:00
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
2021-08-15 17:47:07 +00:00
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...).
2021-08-15 17:47:07 +00:00
https://book.hacktricks.xyz/pentesting/pentesting-snmp
2021-08-15 17:47:07 +00:00
Entry_2:
Name: SNMP Check
Description: Enumerate SNMP
Command: snmp-check {IP}
2021-08-15 17:47:07 +00:00
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
2021-08-15 17:47:07 +00:00
Entry_4:
Name: Nmap
Description: Nmap snmp (no brute)
Command: nmap --script "snmp* and not snmp-brute" {IP}
2021-09-13 15:47:39 +00:00
Entry_5:
Name: Hydra Brute Force
Description: Need Nothing
Command: hydra -P {Big_Passwordlist} -v {IP} snmp
2022-05-08 22:42:39 +00:00
```
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
D'autres façons de soutenir HackTricks:
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>