18 KiB
161,162,10161,10162/udp - Pentesting SNMP
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.
Dica de bug bounty: inscreva-se no Intigriti, uma plataforma premium de bug bounty criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100.000!
{% embed url="https://go.intigriti.com/hacktricks" %}
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 usa 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 em diferentes fabricantes e com diferentes combinações cliente-servidor, foi criada a Base de Informações de Gerenciamento (MIB). A MIB é um formato independente para armazenar informações do dispositivo. Uma MIB é um arquivo de texto no qual todos os objetos SNMP consultáveis de um dispositivo são listados em uma hierarquia de árvore padronizada. Ele contém pelo menos um Object Identifier
(OID
), que, além do endereço exclusivo necessário e um nome, também fornece informações sobre o tipo, direitos de acesso e uma descrição do respectivo objeto.
Os arquivos MIB são escritos no formato de texto ASCII baseado em Abstract Syntax Notation One
(ASN.1
). As MIBs não contêm dados, mas explicam onde encontrar quais informações e como elas se parecem, o que retorna valores para o OID específico ou qual tipo de dados é usado.
OIDs
OIDs significa Identificadores de Objeto. OIDs identificam exclusivamente objetos gerenciados em uma hierarquia MIB. Isso pode ser representado como uma árvore, cujos níveis são atribuídos por diferentes organizações. Os IDs de objeto MIB de nível superior (OIDs) pertencem a diferentes organizações padrão.
Os fornecedores definem ramos privados incluindo objetos gerenciados para seus próprios produtos.
Você pode navegar por uma árvore OID na web aqui: http://www.oid-info.com/cgi-bin/display?tree=#focus ou ver o que um OID significa (como 1.3.6.1.2.1.1
) acessando http://oid-info.com/get/1.3.6.1.2.1.1.
Existem alguns OIDs bem conhecidos como os que estão dentro de 1.3.6.1.2.1 que se referem a variáveis SNMP definidas pelo 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 que 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 de terminal remoto.
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 - exibição para a porta
- 4 - número do ponto
- 7 - estado do ponto
(Exemplo retirado da qui)
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 melhor forma de autenticação 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 antes, para acessar as informações salvas no 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 da comunidade:
public
principalmente funções somente leituraprivate
Leitura/Gravação em geral
Observe que a capacidade de escrita de um OID depende da string da comunidade usada, então mesmo se você descobrir que está sendo usada a string "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, receberá um erro noSuchName
ou readOnly
.
Nas versões 1 e 2/2c, se você usar uma string da comunidade inválida, o servidor não responderá. Portanto, se ele responder, uma string da comunidade válida foi usada.
Portas
- O agente SNMP recebe solicitações na porta UDP 161.
- O gerenciador recebe notificações (Traps e InformRequests) na porta 162.
- Quando usado com Transport Layer Security ou Datagram Transport Layer Security, as solicitações são recebidas na porta 10161 e as notificações são enviadas para a porta 10162.
Força Bruta de Strings 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 da 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, 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
O SNMP tem muitas informações sobre o host e coisas que você pode achar interessante 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
De https://academy.hackthebox.com/module/112/section/1075
Configurações | Descrição |
---|---|
rwuser noauth |
Fornece acesso à árvore OID completa sem autenticação. |
rwcommunity <community string> <IPv4 address> |
Fornece acesso à árvore OID completa independentemente de onde as solicitações foram enviadas. |
rwcommunity6 <community string> <IPv6 address> |
Mesmo acesso que com rwcommunity com a diferença de usar IPv6. |
Cisco
Dê uma olhada nesta página se você estiver usando equipamentos Cisco:
{% content-ref url="cisco-snmp.md" %} cisco-snmp.md {% endcontent-ref %}
Do SNMP para RCE
Se você tiver a string que permite que você escreva valores dentro do serviço SNMP, poderá abusar dela para executar comandos:
{% content-ref url="snmp-rce.md" %} snmp-rce.md {% endcontent-ref %}
SNMP em massa
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 [Community-string]@[IP do servidor SNMP]:[iso id]
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
Uma das primeiras coisas que faço é extrair os dados MIB sysDesc .1.3.6.1.2.1.1.1.0 de cada arquivo para determinar de quais dispositivos eu coletei informações. Isso pode ser facilmente feito usando o seguinte comando grep:
grep ".1.3.6.1.2.1.1.1.0" *.snmp
Identificar string privada
Como exemplo, se eu puder identificar a string de comunidade privada usada por uma organização em seus roteadores Cisco IOS, então eu poderia possivelmente usar essa string de comunidade para extrair as configurações em execução desses roteadores. O melhor método para encontrar esses dados geralmente está relacionado aos dados de armadilha SNMP. Então, novamente, usando o seguinte grep, podemos analisar rapidamente muitos dados MIB procurando a palavra-chave "trap":
grep -i "trap" *.snmp
Nomes de usuário/senhas
Outra área de interesse são os logs, descobri que existem alguns dispositivos que mantêm logs dentro das tabelas MIB. Esses logs também podem conter tentativas de login falhas. Pense na última vez que você fez login em um dispositivo via Telnet ou SSH e inadvertidamente digitou sua senha como nome de usuário. Normalmente, procuro por palavras-chave como fail, failed ou login e examino esses dados para ver se há algo de valor.
grep -i "login\|fail" *.snmp
Emails
E-mails são uma fonte valiosa de informações para um atacante. Eles podem conter senhas, informações de contato, informações financeiras e muito mais. É importante verificar se há vazamentos de e-mails de uma organização-alvo e tentar obter acesso a contas de e-mail relevantes.
Algumas técnicas comuns para obter acesso a contas de e-mail incluem phishing, engenharia social e exploração de vulnerabilidades em clientes de e-mail. Uma vez que o acesso à conta de e-mail é obtido, o atacante pode usar a conta para enviar e-mails maliciosos, acessar outras contas vinculadas e obter mais informações confidenciais.
Para evitar vazamentos de e-mails, é importante que as organizações implementem medidas de segurança, como autenticação de dois fatores, criptografia de e-mail e treinamento de conscientização de segurança para funcionários. Além disso, é importante monitorar regularmente a atividade de e-mail em busca de atividades suspeitas.
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 fazê-lo.
Spoofing
Se houver uma ACL que permita apenas alguns IPs a consultar o serviço SMNP, você pode falsificar um desses endereços dentro do pacote UDP e capturar o tráfego.
Examinando arquivos de configuração SNMP
- snmp.conf
- snmpd.conf
- snmp-config.xml
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
Dica de recompensa por bugs: inscreva-se no Intigriti, uma plataforma premium de recompensas por bugs criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje mesmo e comece a ganhar recompensas de até $100.000!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Quer ver sua empresa anunciada no HackTricks? Ou quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.