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

298 lines
18 KiB
Markdown
Raw Normal View History

# 161,162,10161,10162/udp - Pentesting SNMP
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Outras formas de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus 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.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-04-30 20:31:18 +00:00
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" %}
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
## 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)
```
2022-10-02 21:10:53 +00:00
{% 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**.
2022-10-02 21:10:53 +00:00
{% endhint %}
2022-05-07 13:38:40 +00:00
### 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** consultáveis 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.
2022-05-07 13:38:40 +00:00
### OIDs
**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.
![](../../.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 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](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](http://oid-info.com/get/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...)
2023-06-06 18:56:34 +00:00
### **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 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.
2023-06-06 18:56:34 +00:00
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
2023-06-06 18:56:34 +00:00
### 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 leitura**
* **`private`** **Leitura/Gravação** em geral
Observe que **a possibilidade de escrita de um OID depende da string da comunidade usada**, então **mesmo** se você descobrir que "**public**" está sendo usado, você pode ser capaz de **escrever alguns valores**. Também **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**.
2023-06-06 18:56:34 +00:00
## Portas
[Da Wikipedia](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol):
2023-06-06 18:56:34 +00:00
* 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 [Segurança da Camada de Transporte](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) ou [Segurança da Camada de Transporte de Datagramas](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 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](../../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
2022-06-08 11:20:23 +00:00
# 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**:
```bash
2022-06-08 11:20:23 +00:00
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .
2022-10-02 21:10:53 +00:00
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
2021-06-21 22:18:24 +00:00
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
2022-10-02 21:10:53 +00:00
snmp-check [DIR_IP] -p [PORT] -c [COMM_STRING]
2022-10-02 21:10:53 +00:00
nmap --script "snmp* and not snmp-brute" <target>
2022-10-02 21:10:53 +00:00
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:
```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 (podem conter senhas)....
### **Configurações Perigosas**
2022-10-02 21:10:53 +00:00
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:
1. **`rwuser noauth`** é definido para permitir acesso total à árvore OID sem a necessidade de autenticação. Essa configuração é direta e permite acesso irrestrito.
2. Para 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 **cadeia 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.
2022-09-30 10:43:59 +00:00
### Cisco
Dê uma olhada nesta página se você tiver equipamentos Cisco:
2022-09-30 10:43:59 +00:00
{% content-ref url="cisco-snmp.md" %}
[cisco-snmp.md](cisco-snmp.md)
{% endcontent-ref %}
## De SNMP para RCE
2021-04-19 17:04:40 +00:00
Se você tiver a **cadeia** que permite **escrever valores** dentro do serviço SNMP, você pode abusar dela para **executar comandos**:
2021-04-19 17:04:40 +00:00
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
2021-04-19 17:04:40 +00:00
## **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 rapidamente.
Braa implementa sua PRÓPRIA pilha SNMP, portanto, NÃO precisa de bibliotecas SNMP como net-snmp.
**Sintaxe:** braa \[Cadeia 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.
2023-06-06 18:56:34 +00:00
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 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**:
```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, 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**:
```bash
grep -i "trap" *.snmp
```
### **Nomes de usuário/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ário. Palavras-chave como _fail_, _failed_ ou _login_ são pesquisadas para encontrar dados valiosos:
```bash
grep -i "login\|fail" *.snmp
```
### **Emails**
Por fim, para extrair **endereços de e-mail** dos dados, é utilizado um comando **grep** com uma expressão regular, 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
```
2023-06-06 18:56:34 +00:00
## Modificando valores SNMP
Você pode usar o _**NetScanTools**_ para **modificar valores**. Você precisará saber a **string privada** para fazer isso.
2022-05-07 13:38:40 +00:00
## 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 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) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
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
```
2021-08-12 13:34:46 +00:00
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
2021-08-15 17:47:07 +00:00
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...).
2021-08-15 17:47:07 +00:00
https://book.hacktricks.xyz/pentesting/pentesting-snmp
2021-08-15 17:47:07 +00:00
Entry_2:
Name: SNMP Check
Description: Enumerate SNMP
Command: snmp-check {IP}
2021-08-15 17:47:07 +00:00
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
2021-08-15 17:47:07 +00:00
Entry_4:
Name: Nmap
Description: Nmap snmp (no brute)
Command: nmap --script "snmp* and not snmp-brute" {IP}
2021-09-13 15:47:39 +00:00
Entry_5:
Name: Hydra Brute Force
Description: Need Nothing
Command: hydra -P {Big_Passwordlist} -v {IP} snmp
2022-05-08 22:42:39 +00:00
```
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
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**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus 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.
2022-04-28 16:01:33 +00:00
</details>