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.
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.
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)
“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
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 sistema1.3.6.1.2.1.1.5.0— Nome do hostname1.3.6.1.2.1.1.6.0— Localização física1.3.6.1.2.1.25.1.3.0— Processos em execução1.3.6.1.2.1.4.20.1— Endereços IP das interfaces1.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/disco1.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
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
ntpmonpode 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
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
“/” 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
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]
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 = 2nosmb.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 LOGONnã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,
noqueryelimitednorestrict - 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.