mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-24 03:53:29 +00:00
302 lines
18 KiB
Markdown
302 lines
18 KiB
Markdown
|
# 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 %}
|