### O que é SNMP?
**Simple Network Management Protocol (SNMP)** é um protocolo usado para monitorar e gerenciar dispositivos de rede como roteadores, switches, impressoras e servidores.
**Características importantes:**
- Funciona sobre **UDP** (protocolo sem estado)
- Versões 1, 2, e 2c **não criptografam** dados
- Frequentemente configurado com **community strings padrão**
- Vulnerável a **IP spoofing** e **replay attacks**
- Métodos de autenticação **fracos** por padrão
### O que são MIBs?
**Management Information Base (MIB)** é uma base de dados estruturada em árvore que contém informações sobre dispositivos de rede.
**Estrutura:**
- Organizada em formato de **árvore hierárquica**
- Cada ramo representa **organizações** ou **funcionalidades**
- Folhas da árvore contêm **valores específicos** consultáveis
## Descoberta com NMAP
### Descoberta Básica
Encontrar hosts com SNMP ativo e salvar em arquivo.
```bash
# Scan básico de descoberta SNMP
sudo nmap -sU --open -p 161 <targetRange> -oG open-snmp.txt
# Exemplo prático
sudo nmap -sU --open -p 161 192.168.1.0/24 -oG open-snmp.txt
```
### Bruteforce de Community Strings
Tentar descobrir community strings válidas.
```bash
# Bruteforce com wordlist padrão
sudo nmap -sU -p 161 --script snmp-brute <ipAddr>
# Bruteforce com wordlist customizada
sudo nmap -sU -p 161 --script snmp-brute --script-args snmp-brute.communitiesdb=/usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt <ipAddr>
```
### Enumeração Específica com NMAP
Scripts especializados para diferentes tipos de informação.
```bash
# Enumerar usuários Windows
sudo nmap -sU -p 161 --script snmp-win32-users <ipAddr>
# Enumerar serviços Windows
sudo nmap -sU -p 161 --script snmp-win32-services <ipAddr>
# Executar todos os scripts SNMP
sudo nmap -sU -p 161 --script snmp-* <ipAddr> -oG nmap/snmp.txt
```
## Enumeração com SNMPWALK
### Comandos Básicos
Ferramenta principal para consultar MIBs de forma automática.
```bash
# SNMPv1 com community "public" e timeout de 10s
snmpwalk -c public -v1 -t 10 <ipAddr>
# SNMPv1 com conversão automática hex para ASCII
snmpwalk -c public -v1 -Oa <ipAddr>
# SNMPv2c básico
snmpwalk -v2c -c public <ipAddr>
```
### Enumeração Específica
Consultar informações específicas do sistema.
```bash
# Listar software instalado
snmpwalk -v2c -c public <ipAddr> hrSWInstalledName
# Verificar quantidade de RAM
snmpwalk -v2c -c public <ipAddr> hrMemorySize
# Informações do sistema
snmpwalk -v2c -c public <ipAddr> system
# Interfaces de rede
snmpwalk -v2c -c public <ipAddr> interfaces
```
## Consultas de MIBs Específicas
### Usuários e Processos Windows
OIDs específicos para sistemas Windows.
```bash
# Usuários locais Windows
snmpwalk -c public -v1 <ipAddr> 1.3.6.1.4.1.77.1.2.25
# Processos em execução
snmpwalk -c public -v1 <ipAddr> 1.3.6.1.2.1.25.4.2.1.2
# Software instalado
snmpwalk -c public -v1 <ipAddr> 1.3.6.1.2.1.25.6.3.1.2
# Portas TCP em escuta
snmpwalk -c public -v1 <ipAddr> 1.3.6.1.2.1.6.13.1.3
```
### MIBs Úteis para Pentesting
Lista de OIDs importantes para reconhecimento.
```bash
# Informações do sistema
1.3.6.1.2.1.1.1.0 # Descrição do sistema
1.3.6.1.2.1.1.5.0 # Nome do host
1.3.6.1.2.1.1.6.0 # Localização do sistema
# Usuários e contas
1.3.6.1.4.1.77.1.2.25 # Usuários Windows
1.3.6.1.2.1.25.4.2.1.2 # Processos rodando
# Rede
1.3.6.1.2.1.2.2.1.2 # Interfaces de rede
1.3.6.1.2.1.4.20.1.1 # Endereços IP
1.3.6.1.2.1.6.13.1.3 # Portas TCP abertas
# Armazenamento
1.3.6.1.2.1.25.2.3.1.3 # Tipos de storage
1.3.6.1.2.1.25.6.3.1.2 # Software instalado
```
## Bruteforce com ONESIXTYONE
### Preparação
Criar arquivo com community strings comuns.
```bash
# Community strings mais comuns
public
private
manager
management
admin
community
snmp
monitor
```
### Comandos de Bruteforce
Ferramenta rápida para testar múltiplas community strings.
```bash
# Bruteforce contra IP único com wordlist padrão
onesixtyone -c /usr/share/doc/onesixtyone/dict.txt <ipAddr>
# Bruteforce contra lista de IPs
onesixtyone -c <wordList> -i <targetFile>
# Bruteforce com wordlist customizada
onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt <ipAddr>
# Bruteforce silencioso (só sucessos)
onesixtyone -q -c <wordList> <ipAddr>
```
## Modificação com SNMPSET
### Comandos de Modificação
**⚠️ CUIDADO:** Apenas use em ambientes de teste autorizados.
```bash
# Alterar valor de um OID específico
snmpset -v2c -c private <ipAddr> <OID> <tipo> <newValue>
# Alterar informação de contato do sistema
snmpset -v2c -c private <ipAddr> sysContact.0 s "Novo Contato"
# Alterar localização do sistema
snmpset -v2c -c private <ipAddr> sysLocation.0 s "Nova Localização"
# Tipos de dados comuns:
# s = string
# i = integer
# a = ip address
# o = object identifier
```
## Ferramentas Complementares
### SNMP-Check
Ferramenta automatizada para enumeração completa.
```bash
# Instalação
apt-get install snmp-check
# Uso básico
snmp-check -t <ipAddr> -c public
# Com output detalhado
snmp-check -t <ipAddr> -c public -v 2c -w
```
### Metasploit Modules
Módulos úteis para enumeração SNMP.
```bash
# Descoberta de community strings
use auxiliary/scanner/snmp/snmp_login
# Enumeração de usuários
use auxiliary/scanner/snmp/snmp_enumusers
# Enumeração geral
use auxiliary/scanner/snmp/snmp_enum
```
## Community Strings Comuns
### Lista Básica
```
public
private
community
manager
admin
snmp
monitor
read
write
guest
security
```
### Lista Estendida para Dispositivos Específicos
```bash
# Cisco
cisco
c0mmu1ty
cable-docsis
ANYCOM
# HP/3Com
admin
hp_admin
switch
# Dell
dell
private
# Para routers/switches
default
secret
system
```
## Dicas de Segurança e Evasão
### Técnicas de Evasão
```bash
# Usar source port específica (pode contornar alguns firewalls)
nmap -sU -p 161 --source-port 161 <target>
# Throttling para evitar detecção
snmpwalk -c public -v1 -t 10 -r 1 <target>
# Usar diferentes versões SNMP
snmpwalk -v1 -c public <target> # SNMPv1
snmpwalk -v2c -c public <target> # SNMPv2c
```
### Limpeza de Logs
```bash
# Verificar se deixou rastros (se tiver acesso write)
snmpset -v2c -c private <target> sysContact.0 s "Original Contact"
```