hacktricks/network-services-pentesting/pentesting-snmp/README.md
2024-12-12 13:56:11 +01:00

301 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 161,162,10161,10162/udp - Pentesting SNMP
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Se você está interessado em **carreira de hacking** e hackear o inhackeá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 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 entre fabricantes e com diferentes combinações cliente-servidor, a **Management Information Base (MIB)** foi criada. MIB é um **formato independente para armazenar informações de dispositivos**. Um MIB é um **arquivo de texto** no qual todos os **objetos SNMP** consultáveis de um dispositivo estão listados em uma hierarquia de árvore **padronizada**. Ele contém pelo menos um **`Object Identifier` (`OID`)**, que, além do **endereço único** 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`). Os **MIBs não contêm dados**, mas explicam **onde encontrar quais informações** e como elas se parecem, quais valores retornam para o OID específico ou qual tipo de dado é utilizado.
### OIDs
**Object Identifiers (OIDs)** desempenham um papel crucial. Esses identificadores únicos são projetados para gerenciar objetos dentro de uma **Management Information Base (MIB)**.
Os níveis mais altos dos IDs de objetos MIB, ou OIDs, são alocados a diversas organizações de padronização. É dentro desses níveis superiores que a estrutura para práticas e padrões de gerenciamento global é estabelecida.
Além disso, os fornecedores têm a liberdade de estabelecer ramificações privadas. Dentro dessas ramificações, eles têm a **autonomia para incluir objetos gerenciados pertinentes às suas próprias linhas de produtos**. Este sistema garante que haja um método estruturado e organizado para identificar e gerenciar uma ampla gama de objetos entre diferentes fornecedores e padrões.
![](<../../.gitbook/assets/SNMP_OID_MIB_Tree (1).png>)
Você pode **navegar** por uma **árvore OID** na web aqui: [http://www.oid-info.com/cgi-bin/display?tree=#focus](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](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](http://oid-info.com/get/1.3.6.1.2.1) que referenciam variáveis do Simple Network Management Protocol (SNMP) definidas no MIB-2. E a partir dos **OIDs pendentes deste** você pode obter alguns dados interessantes do host (dados do sistema, dados da rede, dados de processos...)
### **Exemplo de OID**
[**Exemplo daqui**](https://www.netadmintools.com/snmp-mib-and-oids/):
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`**
Aqui está uma análise 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 ocorrerão através da Internet.
* 4 este valor determina que este dispositivo é feito por uma organização privada e não por uma governamental.
* 1 este valor denota que o dispositivo é feito por uma empresa ou entidade comercial.
Esses primeiros seis valores tendem a ser os mesmos para todos os dispositivos e fornecem as 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 exibição 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 é a mais frequente, a **autenticação é baseada em uma string** (community string) que viaja em **texto simples** (todas as informações viajam em texto simples). **Versão 2 e 2c** também enviam o **tráfego em texto simples** e usam uma **community string 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).
### Community Strings
Como mencionado anteriormente, **para acessar as informações salvas no MIB você precisa conhecer a community string nas versões 1 e 2/2c e as credenciais na versão 3.**\
Existem **2 tipos de community strings**:
* **`public`** principalmente funções **somente leitura**
* **`private`** **Leitura/Gravação** em geral
Note que **a capacidade de gravação de um OID depende da community string utilizada**, então **mesmo** que você descubra que "**public**" está sendo usado, você pode ser capaz de **gravar alguns valores.** Além disso, podem **existir** objetos que são **sempre "Somente Leitura".**\
Se você tentar **gravar** um objeto, um erro **`noSuchName` ou `readOnly`** é recebido\*\*.\*\*
Nas versões 1 e 2/2c, se você usar uma **bad** community string, o servidor não **responderá**. Portanto, se ele responder, uma **community string válida foi usada**.
## Portas
[Do Wikipedia](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol):
* O agente SNMP recebe solicitações na porta UDP **161**.
* O gerente recebe notificações ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) e [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) na porta **162**.
* Quando usado com [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) ou [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security), as solicitações são recebidas na porta **10161** e as notificações são enviadas para a porta **10162**.
## Brute-Force Community String (v1 e v2c)
Para **adivinhar a community string** você poderia realizar um ataque de dicionário. Confira [aqui diferentes maneiras de realizar um ataque de força bruta contra SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Uma community string frequentemente usada é `public`.
## Enumerando SNMP
É recomendado instalar o seguinte para ver o que significa **cada OID coletado** do dispositivo:
```bash
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ê souber uma string de comunidade válida, pode acessar os dados usando **SNMPWalk** ou **SNMP-Check**:
```bash
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 sobre o sistema com o seguinte comando:
```bash
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** (pode conter senhas)....
### **Configurações Perigosas**
No âmbito da gestão de rede, certas configurações e parâmetros são fundamentais para garantir monitoramento e controle abrangentes.
### Configurações de Acesso
Duas configurações principais permitem o acesso à **árvore OID completa**, que é um componente crucial na gestão de rede:
1. **`rwuser noauth`** é configurado para permitir acesso total à árvore OID sem a necessidade de autenticação. Esta configuração é direta e permite acesso irrestrito.
2. Para um controle mais específico, o acesso pode ser concedido usando:
* **`rwcommunity`** para endereços **IPv4**, e
* **`rwcommunity6`** 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 de Base de Informação de Gerenciamento (MIB)** são utilizados para monitorar vários aspectos de um sistema Windows através do SNMP:
* **Processos do Sistema**: Acessado via `1.3.6.1.2.1.25.1.6.0`, este 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 atualmente em execução.
* **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` é utilizado.
* **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, `1.3.6.1.2.1.25.6.3.1.2` é empregado.
* **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**: Finalmente, `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ê estiver usando equipamentos Cisco:
{% content-ref url="cisco-snmp.md" %}
[cisco-snmp.md](cisco-snmp.md)
{% endcontent-ref %}
## De SNMP a RCE
Se você tiver a **string** que permite **escrever valores** dentro do serviço SNMP, pode ser capaz de abusar disso para **executar comandos**:
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
## **SNMP Massivo**
[Braa ](https://github.com/mteg/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 rápido.
Braa implementa sua própria pilha SNMP, portanto, não precisa de nenhuma biblioteca SNMP como net-snmp.
**Sintaxe:** braa \[String-de-comunidade]@\[IP do servidor SNMP]:\[id iso]
```bash
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/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)):
### **Dispositivos**
O processo começa com a extração de **dados MIB sysDesc** (1.3.6.1.2.1.1.1.0) de cada arquivo para identificar os dispositivos. Isso é realizado através do uso de um **comando grep**:
```bash
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, particularmente em roteadores Cisco IOS. Essa string permite a extração de **configurações em execução** dos roteadores. A identificação geralmente se baseia na análise de dados de SNMP Trap em busca da palavra "trap" com um **comando grep**:
```bash
grep -i "trap" *.snmp
```
### **Nomes de Usuário/Senhas**
Logs armazenados nas tabelas MIB são examinados em busca de **tentativas de login falhadas**, que podem acidentalmente incluir senhas inseridas como nomes de usuário. Palavras-chave como _fail_, _failed_ ou _login_ são pesquisadas para encontrar dados valiosos:
```bash
grep -i "login\|fail" *.snmp
```
### **Emails**
Finalmente, para extrair **endereços de e-mail** dos dados, um **comando grep** com uma expressão regular é usado, focando em padrões que correspondem a formatos de e-mail:
```bash
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 _**NetScanTools**_ para **modificar valores**. Você precisará conhecer a **string privada** para fazer isso.
## Spoofing
Se houver uma ACL que permite apenas alguns IPs consultar o serviço SNMP, 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
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Se você está interessado em uma **carreira em hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
{% embed url="https://www.stmcyber.com/careers" %}
## Comandos Automáticos 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
```
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Supporte o HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
{% endhint %}