.. | ||
cisco-snmp.md | ||
README.md | ||
snmp-rce.md |
161,162,10161,10162/udp - Pentesting SNMP
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Se você está interessado em carreira de hacking e hackear o inquebrável - estamos contratando! (fluência em polonês escrita e falada necessária).
{% embed url="https://www.stmcyber.com/careers" %}
Informações Básicas
SNMP - Simple Network Management Protocol é um protocolo usado para monitorar diferentes dispositivos na rede (como roteadores, switches, impressoras, IoTs...).
PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
{% hint style="info" %} O SNMP também utiliza a porta 162/UDP para traps. Estes são pacotes de dados enviados do servidor SNMP para o cliente sem serem explicitamente solicitados. {% endhint %}
MIB
Para garantir que o acesso SNMP funcione entre fabricantes e com diferentes combinações cliente-servidor, a Base de Informações de Gerenciamento (MIB) foi criada. A MIB é um formato independente para armazenar informações do dispositivo. Uma MIB é um arquivo texto no qual todos os objetos SNMP de um dispositivo são listados em uma hierarquia de árvore padronizada. Ela contém pelo menos um Identificador de Objeto
(OID
), que, além do endereço único necessário e de um nome, também fornece informações sobre o tipo, direitos de acesso e uma descrição do objeto respectivo.
Os arquivos MIB são escritos no formato de texto ASCII baseado em Notação de Sintaxe Abstrata Um
(ASN.1
). As MIBs não contêm dados, mas explicam onde encontrar quais informações e como são, retornando valores para o OID específico, ou qual tipo de dado é usado.
OIDs
Os Identificadores de Objeto (OIDs) desempenham um papel crucial. Esses identificadores únicos são projetados para gerenciar objetos dentro de uma Base de Informações de Gerenciamento (MIB).
Os níveis mais altos dos IDs de objeto MIB, ou OIDs, são alocados a diversas organizações de definição de padrões. É dentro desses níveis superiores que o framework para práticas e padrões de gerenciamento global é estabelecido.
Além disso, os fornecedores têm a liberdade de estabelecer ramos privados. Dentro desses ramos, eles têm a autonomia para incluir objetos gerenciados pertinentes às suas próprias linhas de produtos. Esse sistema garante que haja um método estruturado e organizado para identificar e gerenciar uma ampla variedade de objetos entre diferentes fornecedores e padrões.
Você pode navegar por uma árvore OID na web aqui: http://www.oid-info.com/cgi-bin/display?tree=#focus ou ver o significado de um OID (como 1.3.6.1.2.1.1
) acessando http://oid-info.com/get/1.3.6.1.2.1.1.
Existem alguns OIDs conhecidos como os que estão dentro de 1.3.6.1.2.1 que referenciam variáveis SNMP definidas pela MIB-2. E a partir dos OIDs pendentes deste, você pode obter alguns dados interessantes do host (dados do sistema, dados de rede, dados de processos...)
Exemplo de OID
1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7
Aqui está uma quebra deste endereço.
- 1 - isso é chamado de ISO e estabelece que este é um OID. Por isso, todos os OIDs começam com "1"
- 3 - isso é chamado de ORG e é usado para especificar a organização que construiu o dispositivo.
- 6 - este é o dod ou o Departamento de Defesa, que é a organização que estabeleceu a Internet primeiro.
- 1 - este é o valor da internet para denotar que todas as comunicações acontecerão através da Internet.
- 4 - este valor determina que este dispositivo é feito por uma organização privada e não governamental.
- 1 - este valor denota que o dispositivo é feito por uma empresa ou entidade comercial.
Esses seis primeiros valores tendem a ser os mesmos para todos os dispositivos e fornecem informações básicas sobre eles. Esta sequência de números será a mesma para todos os OIDs, exceto quando o dispositivo é feito pelo governo.
Passando para o próximo conjunto de números.
- 1452 - dá o nome da organização que fabricou este dispositivo.
- 1 - explica o tipo de dispositivo. Neste caso, é um despertador.
- 2 - determina que este dispositivo é uma unidade terminal remota.
O restante dos valores fornece informações específicas sobre o dispositivo.
- 5 - denota um ponto de alarme discreto.
- 1 - ponto específico no dispositivo
- 3 - porta
- 21 - endereço da porta
- 1 - display para a porta
- 4 - número do ponto
- 7 - estado do ponto
Versões SNMP
Existem 2 versões importantes do SNMP:
- SNMPv1: Principal, ainda é o mais frequente, a autenticação é baseada em uma string (string da comunidade) que viaja em texto simples (todas as informações viajam em texto simples). Versão 2 e 2c enviam o tráfego em texto simples também e usam uma string da comunidade como autenticação.
- SNMPv3: Usa uma forma de autenticação melhor e as informações viajam criptografadas (um ataque de dicionário poderia ser realizado, mas seria muito mais difícil encontrar as credenciais corretas do que no SNMPv1 e v2).
Strings da Comunidade
Como mencionado anteriormente, para acessar as informações salvas na MIB, você precisa saber a string da comunidade nas versões 1 e 2/2c e as credenciais na versão 3.
Existem 2 tipos de strings de comunidade:
public
principalmente funções somente leituraprivate
Leitura/Gravação em geral
Observe que a possibilidade de escrever em um OID depende da string da comunidade usada, então mesmo se você descobrir que está sendo usada a "public", você pode ser capaz de escrever alguns valores. Além disso, podem existir objetos que são sempre "Somente Leitura".
Se você tentar escrever um objeto, um erro de noSuchName
ou readOnly
é recebido**.**
Nas versões 1 e 2/2c, se você usar uma string de comunidade ruim, o servidor não responderá. Portanto, se ele responder, uma string de comunidade válida foi usada.
Portas
- O agente SNMP recebe solicitações na porta UDP 161.
- O gerente recebe notificações (Traps e InformRequests) na porta 162.
- Quando usado com Segurança da Camada de Transporte ou Segurança da Camada de Transporte de Datagramas, as solicitações são recebidas na porta 10161 e as notificações são enviadas para a porta 10162.
Ataque de Força Bruta na String da Comunidade (v1 e v2c)
Para adivinhar a string da comunidade, você pode realizar um ataque de dicionário. Verifique aqui diferentes maneiras de realizar um ataque de força bruta contra SNMP. Uma string de comunidade frequentemente usada é public
.
Enumerando SNMP
É recomendado instalar o seguinte para ver o que significa cada OID coletado do dispositivo:
apt-get install snmp-mibs-downloader
download-mibs
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf
Se você conhece uma string de comunidade válida, você pode acessar os dados usando SNMPWalk ou SNMP-Check:
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP]
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] 1.3.6.1.2.1.4.34.1.3 #Get IPv6, needed dec2hex
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] NET-SNMP-EXTEND-MIB::nsExtendObjects #get extended
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] .1 #Enum all
snmp-check [DIR_IP] -p [PORT] -c [COMM_STRING]
nmap --script "snmp* and not snmp-brute" <target>
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
Graças às consultas estendidas (download-mibs), é possível enumerar ainda mais informações sobre o sistema com o seguinte comando:
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
SNMP tem muitas informações sobre o host e coisas que você pode achar interessantes são: Interfaces de rede (endereço IPv4 e IPv6), Nomes de usuário, Tempo de atividade, Versão do servidor/SO e processos em execução (podem conter senhas)....
Configurações Perigosas
No campo da gestão de rede, certas configurações e parâmetros são essenciais para garantir monitoramento e controle abrangentes.
Configurações de Acesso
Duas configurações principais permitem acesso à árvore OID completa, que é um componente crucial na gestão de rede:
rwuser noauth
é definido para permitir acesso total à árvore OID sem a necessidade de autenticação. Essa configuração é direta e permite acesso irrestrito.- Para controle mais específico, o acesso pode ser concedido usando:
rwcommunity
para endereços IPv4, erwcommunity6
para endereços IPv6.
Ambos os comandos requerem uma string de comunidade e o endereço IP relevante, oferecendo acesso total independentemente da origem da solicitação.
Parâmetros SNMP para Microsoft Windows
Uma série de valores da Base de Informações de Gerenciamento (MIB) são utilizados para monitorar vários aspectos de um sistema Windows por meio do SNMP:
- Processos do Sistema: Acessado via
1.3.6.1.2.1.25.1.6.0
, esse parâmetro permite o monitoramento de processos ativos dentro do sistema. - Programas em Execução: O valor
1.3.6.1.2.1.25.4.2.1.2
é designado para rastrear programas em execução atualmente. - Caminho dos Processos: Para determinar de onde um processo está sendo executado, o valor MIB
1.3.6.1.2.1.25.4.2.1.4
é usado. - Unidades de Armazenamento: O monitoramento de unidades de armazenamento é facilitado por
1.3.6.1.2.1.25.2.3.1.4
. - Nome do Software: Para identificar o software instalado em um sistema, é empregado
1.3.6.1.2.1.25.6.3.1.2
. - Contas de Usuário: O valor
1.3.6.1.4.1.77.1.2.25
permite o rastreamento de contas de usuário. - Portas Locais TCP: Por fim,
1.3.6.1.2.1.6.13.1.3
é designado para monitorar portas locais TCP, fornecendo insights sobre conexões de rede ativas.
Cisco
Dê uma olhada nesta página se você possui equipamentos Cisco:
{% content-ref url="cisco-snmp.md" %} cisco-snmp.md {% endcontent-ref %}
De SNMP para RCE
Se você tiver a string que permite escrever valores dentro do serviço SNMP, você pode abusar dela para executar comandos:
{% content-ref url="snmp-rce.md" %} snmp-rce.md {% endcontent-ref %}
SNMP Massivo
Braa é um scanner SNMP em massa. O uso pretendido de tal ferramenta é, é claro, fazer consultas SNMP - mas ao contrário do snmpwalk do net-snmp, ele é capaz de consultar dezenas ou centenas de hosts simultaneamente e em um único processo. Assim, consome muito poucos recursos do sistema e faz a varredura MUITO rapidamente.
Braa implementa sua PRÓPRIA pilha SNMP, portanto, NÃO precisa de bibliotecas SNMP como net-snmp.
Sintaxe: braa [String de Comunidade]@[IP do servidor SNMP]:[id iso]
braa ignite123@192.168.1.125:.1.3.6.*
Isso pode extrair muitos MB de informações que você não pode processar manualmente.
Então, vamos procurar as informações mais interessantes (de https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/):
Dispositivos
O processo começa com a extração dos dados sysDesc MIB (1.3.6.1.2.1.1.1.0) de cada arquivo para identificar os dispositivos. Isso é feito através do uso de um comando grep:
grep ".1.3.6.1.2.1.1.1.0" *.snmp
Identificar String Privada
Um passo crucial envolve identificar a string de comunidade privada usada por organizações, especialmente em roteadores Cisco IOS. Essa string permite a extração de configurações em execução dos roteadores. A identificação frequentemente depende da análise dos dados de SNMP Trap em busca da palavra "trap" com um comando grep:
grep -i "trap" *.snmp
Nomes de Usuários/Senhas
Registros armazenados em tabelas MIB são examinados em busca de tentativas de login malsucedidas, que podem incluir acidentalmente senhas inseridas como nomes de usuários. Palavras-chave como fail, failed ou login são pesquisadas para encontrar dados valiosos:
grep -i "login\|fail" *.snmp
Emails
Por fim, para extrair endereços de email dos dados, é utilizado um comando grep com uma expressão regular, focando em padrões que correspondem a formatos de email:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
Modificando valores SNMP
Você pode usar o NetScanTools para modificar valores. Você precisará saber a string privada para fazer isso.
Spoofing
Se houver uma ACL que permita apenas alguns IPs consultar o serviço SMNP, você pode falsificar um desses endereços dentro do pacote UDP e capturar o tráfego.
Examinar arquivos de configuração SNMP
- snmp.conf
- snmpd.conf
- snmp-config.xml
Se você está interessado em uma carreira de hacking e hackear o inquebrável - estamos contratando! (fluência em polonês escrita e falada necessária).
{% embed url="https://www.stmcyber.com/careers" %}
Comandos Automáticos do HackTricks
Protocol_Name: SNMP #Protocol Abbreviation if there is one.
Port_Number: 161 #Comma separated if there is more than one.
Protocol_Description: Simple Network Managment Protocol #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for SNMP
Note: |
SNMP - Simple Network Management Protocol is a protocol used to monitor different devices in the network (like routers, switches, printers, IoTs...).
https://book.hacktricks.xyz/pentesting/pentesting-snmp
Entry_2:
Name: SNMP Check
Description: Enumerate SNMP
Command: snmp-check {IP}
Entry_3:
Name: OneSixtyOne
Description: Crack SNMP passwords
Command: onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings-onesixtyone.txt {IP} -w 100
Entry_4:
Name: Nmap
Description: Nmap snmp (no brute)
Command: nmap --script "snmp* and not snmp-brute" {IP}
Entry_5:
Name: Hydra Brute Force
Description: Need Nothing
Command: hydra -P {Big_Passwordlist} -v {IP} snmp
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.