Enumeration: Extraindo Informação de Sistemas e Redes

Artigo 08 da série CEH v13: Zero to Hero — Da descoberta ao detalhe: como extrair usuários, shares, políticas e segredos de serviços expostos.

No artigo anterior, fizemos scanning — varremos a rede para descobrir hosts ativos e portas abertas. Sabemos que o alvo tem a porta 445 aberta, que o 161 responde, que existe um servidor LDAP. Mas o que isso significa na prática? Quais shares existem? Quais usuários? Qual a política de senhas? É isso que a enumeration responde.

Se o scanning é olhar pela janela e ver que a casa tem portas, a enumeration é abrir cada porta e inventariar o que tem dentro. É aqui que o pentester ganha munição real para o próximo passo: exploração de vulnerabilidades.

⚠️ Atenção — Legalidade
Enumeration em sistemas sem autorização é crime. Todas as técnicas e comandos deste artigo devem ser executados apenas em ambientes controlados (Metasploitable, VulnHub, Hack The Box) ou com autorização escrita do proprietário.

1. O que é Enumeration?

Enumeration é a terceira fase do methodology do pentest, seguindo reconnaissance e scanning. Enquanto o scanning diz “algo existe”, a enumeration diz “algo existe e aqui estão os detalhes”.

Diferença: Scanning vs. Enumeration

Aspecto Scanning Enumeration
Objetivo Descobrir hosts, portas, serviços Extrair dados detalhados de cada serviço
Granularidade Baixa — “porta 445 aberta” Alta — “shares: IPC$, admin, backup”
Traço Menos ruidoso Mais ruidoso — gera logs
Exemplo nmap -sV 192.168.1.0/24 enum4linux -a 192.168.1.10

Active vs. Passive Enumeration

Active enumeration envia pacotes diretamente ao alvo — você interage com o serviço e analisa a resposta. Mais preciso, mas gera tráfego visível em logs e IDS.

Passive enumeration coleta informação sem contato direto — sniffing de tráfego, análise de DNS público, busca em Google dorks, OSINT. Mais lento, mas stealthier.

Na prática, o pentester usa os dois. Passive para mapear o terreno sem levantar suspeitas; active para extrair os detalhes que realmente importam.

Null Sessions

Uma null session é uma conexão autenticada com credenciais vazias — literalmente, username e password em branco. Serviços Windows (SMB/NetBIOS) historicamente aceitavam null sessions para permitir browsing de recursos na rede. O problema: isso expõe listas de usuários, shares, grupos e políticas sem nenhum tipo de autenticação.

💡 Dica do Hacker
Muitos sistemas legados e configurações mal feitas ainda aceitam null sessions. É sempre o primeiro teste — se funcionar, você acaba de ganhar um mapa completo do alvo sem esforço.

2. NetBIOS e SMB Enumeration

NetBIOS (Network Basic Input/Output System) é um protocolo de rede criado pela IBM nos anos 80 para permitir comunicação entre máquinas Windows. Opera na porta 139 (NetBIOS over TCP) e fornece resolução de nomes, compartilhamento de arquivos e comunicação entre sessões.

SMB (Server Message Block) é o protocolo que implementa compartilhamento de arquivos, impressoras e comunicação inter-processos. Opera na porta 445 (Direct Hosting). É o coração da rede Windows — e um dos serviços mais atacados em existência.

Null Session via SMBClient

# Listar shares com null session
smbclient -L //192.168.1.10 -N

# Output típico:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.20-Debian]

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        admin           Disk      ADMIN share
        IPC$            IPC       IPC Service (metasploitable server)
        tmp             Disk      oh noes!

O flag -N diz ao SMBClient para não enviar senha (null session). Se o servidor aceitar, você recebe a lista completa de shares — incluindo IPC$, que é o ponto de entrada para extrair mais informações via RPC.

# Acessar um share específico
smbclient //192.168.1.10/tmp -N

# Dentro do share:
smb: \> ls
  .                                   D        0  Sun Jun 21 18:06:20 2020
  ..                                  D        0  Sun Jun 21 03:22:13 2020
  .bash_history                       A     1989  Sun Jun 21 18:06:20 2020
  root.txt                            A       22  Sun Jun 21 18:07:24 2020

enum4linux — O Canivete Suíço do SMB

O enum4linux é um script Perl que automatiza praticamente todas as técnicas de enumeration SMB/NetBIOS. É a ferramenta de primeira escolha para qualquer alvo Windows/Samba.

# Enumeration completa (-a = all)
enum4linux -a 192.168.1.10

# Enumeration específica de usuários
enum4linux -U 192.168.1.10

# Enumeration de shares
enum4linux -S 192.168.1.10

# Enumeration de grupos
enum4linux -G 192.168.1.10

# Enumeration de password policy
enum4linux -P 192.168.1.10

Output relevante da enumeração de usuários (-U):

user:[msfadmin] rid:[0x3e8]
user:[postgres] rid:[0x3ea]
user:[user] rid:[0x3eb]
user:[klog] rid:[0x3ec]
user:[sys] rid:[0x3ed]
user:[service] rid:[0x3f0]
user:[root] rid:[0x3f4]

Cada usuário listado é uma potencial entrada — nomes de usuário são metade da equação para um ataque de força bruta ou credential stuffing.

Outras Ferramentas SMB

# NBTScan — descoberta NetBIOS rápida
nbtscan 192.168.1.0/24

# Output:
192.168.1.10  METASPLOITABLE\00        WORKGROUP\00

# Nmap scripts SMB
nmap -p 445 --script smb-enum-shares 192.168.1.10
nmap -p 445 --script smb-enum-users   192.168.1.10
nmap -p 445 --script smb-enum-groups  192.168.1.10
nmap -p 445 --script smb-protocols    192.168.1.10
nmap -p 445 --script smb-security-mode 192.168.1.10

O script smb-security-mode é particularmente valioso — revela se o servidor exige autenticação e qual nível de segurança está configurado:

PORT    STATE SERVICE
445/tcp open  microsoft-ds
| smb-security-mode:
|   account_used: <blank>
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
🔴 Flag Vermelha
“message_signing: disabled” significa que o servidor não verifica a integridade das mensagens SMB. Isso abre espaço para man-in-the-middle attacks e SMB relay — tópicos que veremos quando falarmos de exploração.

3. LDAP Enumeration

LDAP (Lightweight Directory Access Protocol) é o protocolo que serviços de diretório como Active Directory usam para armazenar e organizar informações sobre usuários, computadores, grupos e políticas. Opera na porta 389 (plaintext) ou 636 (LDAPS — criptografado via TLS).

O Active Directory é essencialmente um banco de dados LDAP gigante. Se você consegue consultar esse banco, consegue mapear toda a estrutura organizacional de uma empresa.

Estrutura LDAP

Antes de enumerar, preciso explicar como o LDAP organiza dados:

Componente Significado Exemplo
DN (Distinguished Name) Caminho único para um objeto cn=john,ou=Users,dc=empresa,dc=com
DC (Domain Component) Componente do domínio dc=empresa,dc=com
OU (Organizational Unit) Unidade organizacional (container) ou=Usuarios,ou=TI
CN (Common Name) Nome do objeto cn=Administrator

ldapsearch — Consulta Direta

# Anonymous bind — consulta sem credenciais
ldapsearch -x -H ldap://192.168.1.10 -b "dc=empresa,dc=com"

# Flags:
# -x = simple authentication (sem SASL)
# -H = URI do servidor LDAP
# -b = base DN (ponto de partida da busca)

# Buscar todos os objetos do tipo 'person'
ldapsearch -x -H ldap://192.168.1.10 -b "dc=empresa,dc=com" "(objectClass=person)"

# Buscar apenas atributos específicos
ldapsearch -x -H ldap://192.168.1.10 -b "dc=empresa,dc=com" \
  "(objectClass=user)" sAMAccountName mail description

Output típico de uma consulta de usuários:

# john, Users, empresa.com
dn: CN=john,OU=Users,DC=empresa,DC=com
objectClass: user
sAMAccountName: john
mail: john.silva@empresa.com
description: Analista de TI - Departamento de Suporte
memberOf: CN=VPN-Users,OU=Groups,DC=empresa,DC=com

# jane, Users, empresa.com
dn: CN=jane,OU=Users,DC=empresa,DC=com
sAMAccountName: jane
mail: jane.doe@empresa.com
description: Gerente de Projetos
memberOf: CN=Admin-Laptop,OU=Groups,DC=empresa,DC=com

Cada entrada revela: username, email, cargo, grupos de que faz parte. Isso é ouro puro para engenharia social e para entender a hierarquia da organização.

Windapsearch

Ferramenta Python otimizada para enumeration de Active Directory via LDAP. Agrupa as queries mais úteis:

# Enumerar todos os usuários
python3 windapsearch.py --dc 192.168.1.10 -u

# Enumerar grupos
python3 windapsearch.py --dc 192.168.1.10 -g

# Enumerar computadores
python3 windapsearch.py --dc 192.168.1.10 -c

# Buscar grupos com privilégios interessantes
python3 windapsearch.py --dc 192.168.1.10 --groups \
  --group-filter="*admin*"

Nmap LDAP Scripts

# Enumeração básica LDAP
nmap -p 389 --script ldap-rootdse 192.168.1.10
nmap -p 389 --script ldap-search 192.168.1.10
nmap -p 389 --script ldap-enum-users 192.168.1.10
nmap -p 389 --script ldap-enum-groups 192.168.1.10
💡 Dica do Hacker
Se o AD permite anonymous bind, você acabou de ganhar acesso ao mapa completo da organização sem credenciais. Se não permite, tente credenciais default (guest, anonymous) ou credenciais obtidas em fases anteriores (páginas de login expostas, documentos vazados).

4. SNMP Enumeration

SNMP (Simple Network Management Protocol) é usado para monitorar e gerenciar dispositivos de rede — roteadores, switches, servidores, impressoras. Opera na porta 161 (agente, recebe queries) e 162 (trap, envia alertas).

O problema do SNMP: foi desenhado em 1988 quando segurança não era prioridade. As versões 1 e 2c enviam community strings em plaintext — é basicamente uma senha que trafega sem criptografia. E a community string padrão de quase tudo é public.

Versões SNMP e Segurança

Versão Autenticação Criptografia Risco
v1 Community string (plaintext) Nenhuma Crítico
v2c Community string (plaintext) Nenhuma Crítico
v3 USM (username + hash) DES ou AES Baixo (se bem configurado)

MIB e OIDs

Os dados do SNMP são organizados em uma árvore hierárquica chamada MIB (Management Information Base). Cada nó dessa árvore é um OID (Object Identifier) — um endereço numérico como 1.3.6.1.2.1.1.1.0 que aponta para uma informação específica (nesse caso, a descrição do sistema).

OIDs mais úteis para enumeration:

  • 1.3.6.1.2.1.1.1.0 — Descrição do sistema (sysDescr)
  • 1.3.6.1.2.1.1.3.0 — Uptime do sistema
  • 1.3.6.1.2.1.1.5.0 — Nome do hostname
  • 1.3.6.1.2.1.1.6.0 — Localização física
  • 1.3.6.1.2.1.25.1.3.0 — Processos em execução
  • 1.3.6.1.2.1.4.20.1 — Endereços IP das interfaces
  • 1.3.6.1.4.1.77.1.2.25 — Usuários logados (Windows)
  • 1.3.6.1.2.1.25.2.3.1 — Informação de storage/disco
  • 1.3.6.1.2.1.25.4.2.1 — Processos rodando (com caminho do executável)
  • 1.3.6.1.2.1.25.6.3.1 — Software instalado

snmpwalk — O Básico

# Enumerar tudo com community string "public"
snmpwalk -v2c -c public 192.168.1.10

# Enumerar sistema específico
snmpwalk -v2c -c public 192.168.1.10 1.3.6.1.2.1.1

# Enumerar processos rodando
snmpwalk -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.4.2.1

# Enumerar software instalado
snmpwalk -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.6.3.1

# Output típico (processos):
HOST-RESOURCES-MIB::hrSWRunName.1 = STRING: "init"
HOST-RESOURCES-MIB::hrSWRunName.109 = STRING: "sshd"
HOST-RESOURCES-MIB::hrSWRunName.140 = STRING: "snmpd"
HOST-RESOURCES-MIB::hrSWRunPath.109 = STRING: "/usr/sbin/sshd"
HOST-RESOURCES-MIB::hrSWRunPath.140 = STRING: "/usr/sbin/snmpd"

Você acaba de descobrir quais serviços estão rodando, seus caminhos absolutos e PIDs — sem ter tido acesso ao servidor.

onesixtyone — Brute-force de Community Strings

# Criar wordlist de community strings
echo -e "public\nprivate\nadmin\nmanager\nsnmp\n\
cisco\nswitch\nnetwork\nmonitor\nroot" > /tmp/snmp_wordlist.txt

# Brute-force
onesixtyone -i /tmp/snmp_wordlist.txt 192.168.1.10

# Output:
192.168.1.10 [public]  Linux metasploitable 2.6.24-16-server
192.168.1.10 [private] Linux metasploitable 2.6.24-16-server

snmpcheck e Nmap

# snmpcheck — enumeração automatizada e formatada
snmpcheck -t 192.168.1.10 -c public

# Nmap SNMP scripts
nmap -sU -p 161 --script snmp-info 192.168.1.10
nmap -sU -p 161 --script snmp-processes 192.168.1.10
nmap -sU -p 161 --script snmp-netstat 192.168.1.10
nmap -sU -p 161 --script snmp-sysdescr 192.168.1.10
🔴 Flag Vermelha
SNMP v1/v2c com community string public é absurdamente comum. Em scans de redes corporativas, encontrar 30-40% dos dispositivos com essa configuração não é exceção. O SNMP pode revelar a versão exata do OS, serviços rodando, IPs de interfaces e até tabelas de roteamento.

5. DNS Enumeration — Aprofundamento

No artigo de scanning, fizemos uma passada rápida por DNS. Agora vamos aprofundar — porque o DNS é uma das fontes mais ricas de informação sobre um alvo.

Zone Transfer (AXFR)

Um zone transfer é uma operação legítima onde um servidor DNS secundário sincroniza sua cópia da zona com o servidor primário. O problema: se o servidor primário permite AXFR para qualquer um, você pode baixar o mapa DNS completo — todos os subdomínios, IPs, registros MX, TXT, tudo.

# Tentar zone transfer com dig
dig axfr @ns1.alvo.com alvo.com

# Se funcionar, o output será algo como:
alvo.com.          3600  IN  SOA   ns1.alvo.com. admin.alvo.com.
alvo.com.          3600  IN  A     93.184.216.34
alvo.com.          3600  IN  MX    10 mail.alvo.com.
alvo.com.          3600  IN  NS    ns1.alvo.com.
alvo.com.          3600  IN  NS    ns2.alvo.com.
vpn.alvo.com.      3600  IN  A     93.184.216.50
mail.alvo.com.     3600  IN  A     93.184.216.35
dev.alvo.com.      3600  IN  A     10.0.0.15
staging.alvo.com.  3600  IN  A     10.0.0.20
admin.alvo.com.    3600  IN  A     10.0.0.5
db.alvo.com.       3600  IN  A     10.0.0.100

Percebeu? dev, staging, admin, db — subdomínios internos com IPs privados. Um zone transfer bem-sucedido pode expor toda a infraestrutura interna de uma organização.

Ferramentas de DNS Enumeration

# DNSRecon — enumeração completa
dnsrecon -d alvo.com -t axfr      # tentar zone transfer
dnsrecon -d alvo.com -t brt       # brute-force de subdomínios
dnsrecon -d alvo.com -t srt       # SRV record enumeration
dnsrecon -d alvo.com -t std       # enumeração padrão

# Fierce — subdomain discovery
fierce --domain alvo.com

# dnsenum — ferramenta multifunção
dnsenum alvo.com
dnsenum --dnsserver 8.8.8.8 --enum -f /usr/share/wordlists/dns.txt alvo.com

Registros DNS que Importam

Registro Função O que revela para o atacante
A IPv4 de um host IPs de servidores, subdomínios
AAAA IPv6 de um host Infraestrutura dual-stack
MX Mail exchange Servidor de email, IPs
NS Name server Servidores DNS (potencial alvo de zone transfer)
TXT Text (livre) SPF, DKIM, domínios verificados, infos de infraestrutura
SRV Serviço _sip._tcp, _ldap._tcp, _kerberos — revela serviços internos
PTR Reverse DNS Hostname de um IP — mapeamento reverso
CNAME Alias CDNs, SaaS, serviços terceirizados
# Consultar registros SRV (serviços internos)
dig _ldap._tcp.alvo.com SRV
dig _kerberos._tcp.alvo.com SRV
dig _sip._tcp.alvo.com SRV

# Consultar TXT (SPF, DKIM)
dig alvo.com TXT
dig _dmarc.alvo.com TXT

# Reverse DNS
dig -x 93.184.216.34

Subdomain Brute-force

# Com dnsrecon + wordlist
dnsrecon -d alvo.com -t brt -D /usr/share/wordlists/dns.txt

# Com gobuster (modo DNS)
gobuster dns -d alvo.com -w /usr/share/wordlists/dns.txt \
  -i --no-error

# Output típico:
Found: admin.alvo.com
Found: dev.alvo.com
Found: vpn.alvo.com
Found: api.alvo.com
Found: staging.alvo.com
Found: git.alvo.com
Found: jenkins.alvo.com

6. NTP Enumeration

O NTP (Network Time Protocol), porta 123 (UDP), sincroniza os relógios dos computadores em uma rede. Parece inofensivo, mas revela informações úteis:

  • Versão do software NTP — identifica o OS e possíveis vulnerabilidades
  • IPs de peers — outros servidores com quem sincroniza, mapeando a rede interna
  • Lista de IPs acessíveis — o comando ntpmon pode revelar peers e clientes
# ntptrace — seguir a cadeia de sincronização
ntptrace 192.168.1.10
# localhost: stratum 4, offset 0.0001, synch distance 0.005
# ntp1.exemplo.com: stratum 2, offset -0.0003, synch distance 0.004
# ntp.pool.org: stratum 1, offset 0.0000, synch distance 0.000

# nmap scripts NTP
nmap -sU -p 123 --script ntp-info 192.168.1.10
nmap -sU -p 123 --script ntp-monlist 192.168.1.10
💡 Dica do Hacker
O script ntp-monlist (monlist/ntpdc) revela os últimos 600 clientes que fizeram sincronização com o servidor — uma lista de IPs da rede interna sem precisar de scan. NTP amplification DDoS também explora esse mecanismo.

7. RPC Enumeration

RPC (Remote Procedure Call), porta 111 (TCP/UDP), permite que um programa em um computador execute código em outro. É o mecanismo por trás de NFS (Network File System) e vários serviços Unix/Linux.

# rpcinfo — listar serviços RPC registrados
rpcinfo -p 192.168.1.10

# Output típico:
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  32769  status
    100024    1   tcp  46113  status
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100005    1   udp  33451  mountd
    100005    1   tcp  48204  mountd
    100005    3   udp  46218  mountd

Neste output: NFS (porta 2049) exportando filesystems via mountd. Se o NFS estiver mal configurado (sem root_squash, exportando / para qualquer um), isso pode significar acesso direto ao filesystem do servidor.

# Verificar exports NFS
showmount -e 192.168.1.10

# Output:
Export list for 192.168.1.10:
/ (everyone)
/var *
/home *

# Nmap RPC scripts
nmap -sV -p 111 --script rpcinfo 192.168.1.10
nmap -p 111 --script nfs-showmount 192.168.1.10
🔴 Flag Vermelha
“/” exportado para “everyone” via NFS é um caminho direto para comprometimento completo. Sem root_squash, qualquer usuário local no NFS client vira root no servidor.

8. SMTP Enumeration

O SMTP (Simple Mail Transfer Protocol), porta 25, é usado para envio de email. Alguns servidores SMTP têm comandos que permitem verificar se um endereço de email existe no sistema — sem autenticação.

VRFY e EXPN

# VRFY — verificar se um usuário existe
telnet 192.168.1.10 25
Trying 192.168.1.10...
Connected to 192.168.1.10.
220 metasploitable ESMTP Postfix

VRFY root
252 2.0.0 root

VRFY admin
252 2.0.0 admin

VRFY usuario_inexistente
550 5.1.1 usuario_inexistente: Recipient rejected

# EXPN — expandir mailing list (mostra membros)
EXPN all-staff
252 2.0.0 john
252 2.0.0 jane
252 2.0.0 bob

Código 252 = “não posso confirmar mas não posso negar” (o usuário provavelmente existe). Código 550 = rejeitado (não existe). A diferença entre os dois confirma ou nega a existência do endereço.

# smtp-user-enum — automação com wordlist
smtp-user-enum -M VRFY -U /usr/share/wordlists/usernames.txt \
  -t 192.168.1.10

# Output:
192.168.1.10: root exists
192.168.1.10: admin exists
192.168.1.10: msfadmin exists
192.168.1.10: user exists
192.168.1.10: postgres exists
192.168.1.10: klog exists
192.168.1.10: sys exists
192.168.1.10: service exists
💡 Dica do Hacker
Combine a lista de usuários do SMTP com a lista do SMB. Usuários que aparecem em ambos os serviços são contas reais — priorize essas no ataque.

9. Tabela de Resumo: Protocolos e Ferramentas

Protocolo Porta Ferramenta O que Extrai
SMB 445 enum4linux, smbclient Shares, users, groups, policies
NetBIOS 139 nbtscan, enum4linux Hostname, domínio, workgroup
LDAP 389/636 ldapsearch, windapsearch AD users, groups, OUs, policies
SNMP 161/162 snmpwalk, onesixtyone System info, processes, software
DNS 53 dig, dnsrecon, fierce Subdomínios, IPs, zone transfer
NTP 123 ntptrace, ntpmon Versão, peers, clientes
RPC 111 rpcinfo, showmount Serviços RPC, NFS exports
SMTP 25 telnet, smtp-user-enum Endereços de email válidos

10. Hands-on: Enumeration Completa no Metasploitable 2

Vamos aplicar tudo em um walkthrough completo. Alvo: Metasploitable 2 (192.168.1.10). Atacante: Kali Linux.

Passo 1 — Scanning Inicial

# Descobrir portas abertas
nmap -sS -sV -O 192.168.1.10

# Portas relevantes para enumeration:
# 25/tcp  open  smtp     Postfix smtpd
# 53/tcp  open  domain   ISC BIND 9.4.2
# 111/tcp open  rpcbind  2 (RPC #100000)
# 139/tcp open  netbios-ssn Samba smbd 3.X
# 445/tcp open  microsoft-ds Samba smbd 3.X
# 161/udp open  snmp     net-snmp 5.4.1

Passo 2 — SMB/NetBIOS

# enum4linux completo
enum4linux -a 192.168.1.10 2>&1 | tee /tmp/enum4linux.txt

# Resultados relevantes:
# → Share: IPC$, print$, admin, tmp
# → Usuários: msfadmin, postgres, user, klog, sys, service, root
# → Grupos: root, bin, daemon, disk, users
# → Password policy: min length = 5, no complexity
# → OS: Samba 3.0.20-Debian

# Acessar share tmp (provavelmente com permissão de escrita)
smbclient //192.168.1.10/tmp -N
smb: \> ls
smb: \> put teste.txt
putting file teste.txt as \teste.txt (0.0 kb/s) - OK

Passo 3 — SNMP

# Testar community string "public"
snmpwalk -v2c -c public 192.168.1.10 system | head -20

# Resultados:
# sysDescr.0 = Linux metasploitable 2.6.24-16-server
# sysName.0 = metasploitable
# sysUpTime.0 = 1245 days

# Enumerar processos
snmpwalk -v2c -c public 192.168.1.10 hrSWRunName | grep -v "HOST-RESOURCES"
# Resultado: sshd, apache2, mysql, postgres, vsftpd, snmpd, smbd...

# Enumerar interfaces de rede
snmpwalk -v2c -c public 192.168.1.10 ipAdEntAddr
# 192.168.1.10 (eth0), 127.0.0.1 (lo)

Passo 4 — SMTP

# Verificar se VRFY está habilitado
smtp-user-enum -M VRFY -U /usr/share/wordlists/metasploitable_users.txt \
  -t 192.168.1.10

# Resultado confirmado:
# root, msfadmin, postgres, user, klog, sys, service — todos existem
# Correlação: mesma lista do enum4linux ✓

Passo 5 — DNS

# Tentar zone transfer
dig axfr @192.168.1.10 metasploitable.local

# Se não funcionar, enumerar registros comuns
dig @192.168.1.10 metasploitable.local ANY
dig @192.168.1.10 metasploitable.local SOA

Passo 6 — RPC/NFS

# Ver serviços RPC
rpcinfo -p 192.168.1.10

# NFS exports
showmount -e 192.168.1.10
# Export list:
# / (everyone)

# Montar o NFS localmente
mkdir /mnt/nfs
mount -t nfs 192.168.1.10:/ /mnt/nfs
ls /mnt/nfs
# [Você agora tem acesso ao filesystem completo do servidor]
⚠️ Resumo do Hands-on
Com uma enumeração completa no Metasploitable 2, obtivemos: lista de usuários (SMB + SMTP), shares com escrita (tmp), filesystem completo via NFS, software e versões rodando (SNMP), e password policy fraca (enum4linux). Isso é mais que suficiente para iniciar exploração direcionada.

11. Contra-medidas

Do lado defensivo, o objetivo é reduzir a superfície de enumeration ao máximo. Cada informação que um atacante consegue extrair sem autenticação é uma falha de hardening.

SMB/NetBIOS

  • Desabilitar null sessions — No Windows: HKLM\SYSTEM\CurrentControlSet\Control\LSA\RestrictAnonymous = 1. No Samba: restrict anonymous = 2 no smb.conf
  • Habilitar SMB signing — Previne relay e MITM: server signing = mandatory
  • Restringir shares — Compartilhar apenas o necessário com permissões mínimas
  • Bloquear portas 139/445 no firewall se SMB não é necessário externamente

SNMP

  • Migrar para SNMPv3 — Autenticação (MD5/SHA) + criptografia (DES/AES)
  • Community strings complexas — mínimo 16 caracteres, aleatórios, diferentes por dispositivo
  • ACLs no SNMP — Permitir queries apenas de IPs específicos de management
  • Firewall UDP 161/162 — Não expor SNMP para redes não-management
  • Desabilitar SNMPv1/v2c — Se não é necessário, desliga

LDAP

  • Desabilitar anonymous bind — No AD: garantir que ANONYMOUS LOGON não tem permissões de leitura
  • Restringir atributos — Mesmo usuários autenticados só devem ver o que precisam
  • Usar LDAPS (636) — Criptografar todo o tráfego LDAP
  • Logs de acesso LDAP — Monitorar queries anômalas e tentativas de bind

DNS

  • Restringir zone transfer — No BIND: usar allow-transfer { IP_DO_SECUNDARIO; };
  • Desabilitar recursion pública — Se o servidor não deve resolver para terceiros
  • Remover registros sensíveis — Subdomínios internos não devem ter registros DNS públicos
  • DNSSEC — Assinar zonas para garantir integridade

SMTP

  • Desabilitar VRFY e EXPN — No Postfix: disable_vrfy_command = yes. No Exchange: desabilitar via config
  • Não retornar 550 para usuários inexistentes — Responder com 450 (temporary failure) para não leakar informação

NTP

  • Desabilitar monlist — Em versões recentes do NTP, noquery e limited no restrict
  • Restringir acesso — Permitir queries apenas de servidores de management

RPC/NFS

  • Restringir exports — Exportar apenas filesystems específicos para IPs específicos
  • Habilitar root_squash — Garantir que root no client vira nobody/nfsnobody no servidor
  • Bloquear porta 111 no firewall se RPC não é necessário

Geral

  • Logs e monitoramento — Qualquer tentativa de enumeration (múltiplos VRFY, queries LDAP anônimas, SNMP walk) deve gerar alerta
  • Princípio do menor privilégio — Cada serviço deve ter apenas as permissões estritamente necessárias
  • Segmentação de rede — Serviços como SNMP e RPC não devem estar acessíveis de redes de usuário
  • Pentests regulares — O melhor teste é simular o ataque antes do atacante real

12. Próximo Artigo

Enumeration nos deu o mapa completo do alvo — usuários, serviços, versões, configurações fracas, filesystems expostos. Agora sabemos exatamente onde atacar. No próximo artigo da série, vamos para Análise de Vulnerabilidades: como usar a informação que coletamos para identificar falhas exploráveis com ferramentas como Nessus, OpenVAS, Nikto e Nmap Vuln Scan. Da enumeração à exploitação — estamos cada vez mais perto.

Artigo 09 da série CEH v13: Zero to Hero — Vulnerability Analysis: Encontrando as Falhas Antes do Atacante.