# 161,162,10161,10162/udp - Pentesting SNMP
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* 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
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
\
**Dica para 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 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 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 Protocolo de Gerenciamento de Rede Simples (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 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 – 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 uma governamental.
* 1 – este 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á**. Então, 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**.
## Força Bruta na String de Comunidade (v1 e v2c)
Para **adivinhar a string de comunidade**, você pode realizar um ataque de dicionário. Verifique [aqui diferentes maneiras de realizar um ataque de força bruta contra SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Uma string de comunidade 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ê 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"
braa @:.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 NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** possui 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**
**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 ` | Fornece acesso à árvore OID completa independentemente de onde os pedidos foram enviados. |
| `rwcommunity6 ` | 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 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
```
\
**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" %}
Aprenda a hackear AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* 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
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).