hacktricks/network-services-pentesting/pentesting-snmp/README.md

278 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
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Trabalha numa **empresa de cibersegurança**? Quer ver a sua **empresa anunciada no HackTricks**? ou quer ter acesso à **versão mais recente do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**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**](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 utilizado 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" %}
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 de cliente-servidor, foi criada a **Base de Informação de Gerenciamento (MIB)**. MIB é um formato **independente para armazenar informações do dispositivo**. 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 `Identificador de Objeto` (`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 na `Notação de Sintaxe Abstrata Um` (`ASN.1`). Os **MIBs não contêm dados**, mas explicam **onde encontrar quais informações** e como elas são, quais valores de retorno para o OID específico ou qual tipo de dado é usado.
### OIDs
**OIDs** significa **Identificadores de Objetos**. **OIDs identificam de forma única 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 objetos MIB de nível superior (OIDs) pertencem a diferentes organizações padrão.
**Fabricantes definem ramos privados incluindo objetos gerenciados para seus próprios produtos.**
![](../../.gitbook/assets/snmp\_oid\_mib\_tree.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 conhecidos** como os 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 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á a decomposição deste endereço.
* 1 isso é chamado de ISO e estabelece que isso é 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 isso é o dod ou o Departamento de Defesa, que é a organização que estabeleceu a Internet primeiro.
* 1 esse é o valor da internet para denotar que todas as comunicações acontecerão através da Internet.
* 4 esse valor determina que este dispositivo é feito por uma organização privada e não uma governamental.
* 1 esse valor denota que o dispositivo é feito por uma empresa ou entidade comercial.
Estes seis primeiros valores tendem a ser os mesmos para todos os dispositivos e eles 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 fornece o nome da organização que fabricou este dispositivo.
* 1 explica o tipo de dispositivo. Neste caso, é um relógio despertador.
* 2 determina que este dispositivo é uma unidade terminal remota.
Os valores restantes fornecem 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
_**(Exemplo retirado de**_ [_**aqui**_](https://www.netadmintools.com/snmp-mib-and-oids)_**)**_
### Versões SNMP
Existem 2 versões importantes de SNMP:
* **SNMPv1**: Principal, ainda é o mais frequente, a **autenticação é baseada em uma string** (string de 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 de comunidade como autenticação**.
* **SNMPv3**: Usa uma forma de **autenticação** melhor e as informações viajam **criptografadas** usando (**ataque de dicionário** poderia ser realizado, mas seria muito mais difícil encontrar as credenciais corretas do que no SNMPv1 e v2).
### Strings de Comunidade
Como mencionado anteriormente, **para acessar as informações salvas no MIB, você precisa conhecer a string de 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 de **somente leitura**
* **`private`** **Leitura/Escrita** em geral
Note que **a possibilidade de escrita de um OID depende da string de comunidade usada**, então **mesmo** se você descobrir que "**public**" está sendo usada, você poderia ser capaz de **escrever alguns valores.** Além disso, **pode** haver objetos que são **sempre "Somente Leitura".**\
Se você tentar **escrever** em 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](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**.
## Ataque de Força Bruta em Community String (v1 e v2c)
Para **adivinhar a community string**, você pode 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`.
## Enumeração SNMP
É recomendado instalar o seguinte para entender o que **cada OID coletado** do dispositivo significa:
```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ê conhece 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 a 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** possui muitas informações sobre o host e coisas que podem ser 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**
**De** [**https://academy.hackthebox.com/module/112/section/1075**](https://academy.hackthebox.com/module/112/section/1075)\*\*\*\*
| **Configurações** | **Descrição** |
| ------------------------------------------------ | -------------------------------------------------------------------------------------- |
| `rwuser noauth` | Fornece acesso à árvore OID completa sem autenticação. |
| `rwcommunity <string da comunidade> <endereço IPv4>` | Fornece acesso à árvore OID completa independentemente de onde os pedidos foram enviados. |
| `rwcommunity6 <string da comunidade> <endereço IPv6>` | Mesmo acesso que `rwcommunity` com a diferença de usar IPv6. |
### Parâmetros SNMP do Microsoft Windows
| **Valor MIB** | **Descrição** |
| ------------------------------------------------ | -------------------------------------------------------------------------------------- |
| `1.3.6.1.2.1.25.1.6.0` | Processos do Sistema. |
| `1.3.6.1.2.1.25.4.2.1.2` | Programas em Execução. |
| `1.3.6.1.2.1.25.4.2.1.4` | Caminho dos Processos. |
| `1.3.6.1.2.1.25.2.3.1.4` | Unidades de Armazenamento. |
| `1.3.6.1.2.1.25.6.3.1.2` | Nome do Software. |
| `1.3.6.1.4.1.77.1.2.25` | Contas de Usuário. |
| `1.3.6.1.2.1.6.13.1.3` | Portas Locais TCP. |
### Cisco
Visite esta página se você utiliza equipamentos Cisco:
{% content-ref url="cisco-snmp.md" %}
[cisco-snmp.md](cisco-snmp.md)
{% endcontent-ref %}
## De SNMP para RCE
Se você tem a **string** que permite **escrever valores** dentro do serviço SNMP, você pode ser capaz de abusar disso para **executar comandos**:
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
## **SNMP em Massa**
[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 rapidamente.
Braa implementa sua PRÓPRIA pilha snmp, então NÃO precisa de nenhuma biblioteca SNMP como net-snmp.
**Sintaxe:** braa \[String da comunidade]@\[IP do servidor SNMP]:\[id iso]
```
braa ignite123@192.168.1.125:.1.3.6.*
```
Isso pode extrair uma grande quantidade 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
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 obtive 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 conseguir identificar a string de comunidade privada usada por uma organização em seus roteadores Cisco IOS, então eu poderia usar essa string de comunidade para extrair as configurações em execução desses roteadores. O melhor método para encontrar esses dados frequentemente tem sido relacionado a dados de SNMP Trap. Então, novamente, usando o seguinte grep podemos analisar rapidamente uma grande quantidade de dados MIB em busca da palavra-chave "trap":
```bash
grep -i "trap" *.snmp
```
### Nomes de usuário/senhas
Outra área de interesse são os logs. Descobri que alguns dispositivos armazenam logs dentro das tabelas MIB. Esses logs também podem conter tentativas de login mal-sucedidas. Pense na última vez que você fez login em um dispositivo via Telnet ou SSH e, inadvertidamente, inseriu sua senha como nome de usuário. Eu normalmente procuro por palavras-chave como _fail_, _failed_ ou _login_ e examino esses dados para ver se há algo valioso.
```bash
grep -i "login\|fail" *.snmp
```
### E-mails
```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 SMNP, você pode falsificar um desses endereços dentro do pacote UDP e farejar o tráfego.
## Examinar arquivos de configuração SNMP
* snmp.conf
* snmpd.conf
* snmp-config.xml
## 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
```
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**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**](https://go.intigriti.com/hacktricks) hoje mesmo e comece a ganhar recompensas de até **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de cibersegurança**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **versão mais recente do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**material oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-me no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>