material • 11/06/2026

Guia de CTF

Um guia rápido para abordar máquinas de CTF: enumeração, exploração, foothold e privesc.

por rideckszz

C:\>guia_ □ ×

CTF Cheat Sheet

Roteirinho para: reconhecer, enumerar, pesquisar, testar, conseguir foothold e continuar a enumeração local.

0. Como usar este guia
C:\>mentalidade_ □ ×

Enumeração antes de exploit

A maior parte dos erros em CTF vem de tentar explorar antes de entender o alvo.

Sempre transforme cada saída de ferramenta em uma hipótese: serviço, versão, path, usuário, credencial, tecnologia ou permissão.

1

Anote tudo

IP, portas, serviços, versões, paths, usuários, senhas, nomes, erros e arquivos interessantes.

2

Valide o contexto

Antes de usar exploit, confira se versão, serviço, endpoint e pré-requisitos fazem sentido.

3

Volte quando travar

Travou? Releia a enumeração. Normalmente a pista já apareceu, mas passou batida.

1. Preparação

Comece criando uma pasta para a máquina. Assim você não perde scans, exploits, arquivos e anotações.

organização_ □ ×
mkdir -p ~/ctf/maquina
cd ~/ctf/maquina

touch notes.txt
mkdir scans exploits files

notes.txt

Anotações, hipóteses e credenciais encontradas.

scans

Saídas do Nmap e enumeração.

exploits

PoCs baixadas ou adaptadas.

files

Arquivos coletados durante a prática.

2. Recon inicial
C:\>nmap_ □ ×

Descubra portas e serviços

O primeiro objetivo é descobrir o que está exposto.

scan inicial_ □ ×
nmap -sC -sV -oN scans/initial.txt IP

Se encontrar portas novas, rode uma varredura direcionada nelas.

scan direcionado_ □ ×
nmap -sC -sV -p PORTAS -oN scans/targeted.txt IP

Troque IP pelo IP da máquina. Troque PORTAS pelas portas encontradas, separadas por vírgula.

3. O que tirar do Nmap
C:\>leitura_ □ ×

A saída vira hipótese

Com base nele, podemos seguir com a enumeração ativa.

SSH

Pode ser útil depois, quando alguma credencial aparecer.

HTTP

Abra no navegador, olhe HTML, headers, paths e rode fuzzing.

FTP

Veja se permite anonymous login ou expõe arquivos.

SMB

Procure shares, permissões e arquivos acessíveis.

Versão

Nome do serviço + versão pode levar a CVE ou PoC.

Hostname

Às vezes aparece em certificado, banner ou página web.

4. Enumeração web
C:\>web_ □ ×

Se tem HTTP, olhe a aplicação

Antes de fuzzing, abra a página. Veja nome da aplicação, links, comentários, erros e tecnologias.

web básico_ □ ×
curl -i http://IP/
curl -s http://IP/ | head
whatweb http://IP/

Título

Nome da aplicação, CMS ou tema.

Headers

Server, X-Powered-By, cookies e redirecionamentos.

HTML

Comentários, links, assets e caminhos internos.

Robots

Pode mostrar caminhos que não aparecem na página.

arquivos comuns_ □ ×
curl -s http://IP/robots.txt
curl -s http://IP/sitemap.xml
5. Fuzzing web
C:\>ffuf / gobuster_ □ ×

Procure caminhos escondidos

Fuzzing serve para encontrar diretórios e arquivos que não estão linkados na página.

Comece com wordlist pequena. Se aparecer muito lixo, ajuste filtros.

ffuf_ □ ×
ffuf -u http://IP/FUZZ -w /usr/share/wordlists/dirb/common.txt
gobuster_ □ ×
gobuster dir -u http://IP/ -w /usr/share/wordlists/dirb/common.txt

Se a aplicação responder sempre com o mesmo tamanho, filtre por status ou tamanho.

ffuf com filtros_ □ ×
ffuf -u http://IP/FUZZ -w /usr/share/wordlists/dirb/common.txt -fc 404

ffuf -u http://IP/FUZZ -w /usr/share/wordlists/dirb/common.txt -fs TAMANHO

Se encontrar um diretório, entre nele pelo browser e verifique informações que podem ser interessantes.

6. Quando encontrar uma aplicação
C:\>tecnologia_ □ ×

Identifique antes de atacar

Se aparecer um CMS, painel, serviço web ou versão específica, pare e pesquise.

Nome

O que é a aplicação?

Versão

Existe número de versão visível?

Path

A aplicação está na raiz ou em subdiretório?

Login

Existe painel administrativo?

Parâmetros

Alguma URL usa filtros, IDs ou ações?

Arquivos

README, changelog, config, backup ou install.

buscas úteis_ □ ×
searchsploit "NOME DA APLICAÇÃO"
searchsploit "NOME DA APLICAÇÃO" "VERSÃO"

"NOME DA APLICAÇÃO" "VERSÃO" exploit
"NOME DA APLICAÇÃO" "VERSÃO" CVE
7. Exploits e PoCs
C:\>exploit_ □ ×

Leia antes de rodar

PoC pública pode estar quebrada, antiga ou exigir adaptação.

Verifique linguagem, parâmetros, dependências e impacto.

analisar PoC_ □ ×
head -n 60 exploit.py
grep -n "usage|url|target|payload|wordlist|password|hash" exploit.py

python3 exploit.py -h

URL

O exploit espera URL base, endpoint ou path específico?

Dependências

requests, termcolor, bs4, pwntools ou outra lib?

Versão

Python 2 ou Python 3?

Impacto

Lê dado? Consegue shell? Precisa crackear senha?

Se o exploit retorna hash, token ou credencial, a exploração ainda pode não ter acabado.

8. Credenciais
C:\>senhas_ □ ×

Teste credenciais no lugar certo

Senhas e usuários podem aparecer em páginas, arquivos, backups, banco, configs ou resultado de exploit.

Teste com contexto. Não transforme tudo em brute force.

testes comuns_ □ ×
ssh usuario@IP
ftp IP
smbclient -L //IP/ -U usuario

Reuso

Senha de web pode funcionar no SSH.

Usuários

Nome em página, e-mail, autor ou banco pode virar usuário local.

Hash

Se receber hash e salt, pense em cracking com wordlist.

Painel

Credencial pode servir em painel administrativo antes do SSH.

9. Foothold
C:\>shell_ □ ×

Primeiro acesso

Quando conseguir shell ou SSH, confirme onde caiu.

primeiros comandos_ □ ×
whoami
id
hostname
pwd
uname -a
ls -la

Se for uma reverse shell limitada, tente melhorar a interatividade.

tty básica_ □ ×
python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
stty rows 40 columns 120

Se estiver via SSH, normalmente não precisa estabilizar shell.

10. Enumeração local
C:\>linux_ □ ×

Depois do foothold, volte a enumerar

Agora a superfície é local: permissões, arquivos, usuários, sudo, SUID, capabilities e cron.

privesc básico_ □ ×
sudo -l

cat /etc/passwd
ls -la /home
ls -la /root 2>/dev/null

find / -perm -4000 -type f 2>/dev/null
getcap -r / 2>/dev/null

cat /etc/crontab
ls -la /etc/cron.d

sudo -l

Mostra comandos que podem rodar como outro usuário.

SUID

Binários que executam com permissão do dono.

Capabilities

Permissões especiais quebradas em partes.

Cron

Tarefas automáticas que podem rodar como root.

11. GTFOBins
C:\>privesc_ □ ×

Permissão primeiro, técnica depois

Se encontrar um binário interessante via sudo -l ou SUID, pesquise o nome no GTFOBins.

Use a seção que combina com seu contexto: sudo, SUID, Shell, File read ou File write.

fluxo_ □ ×
1. Rode sudo -l.
2. Veja se algum binário pode rodar como root.
3. Pesquise o nome do binário no GTFOBins.
4. Abra a seção que combina com seu caso.
5. Se o contexto for sudo, procure a seção sudo.
6. Se a técnica abrir shell, entenda que essa shell pode herdar o privilégio do comando executado.

Editores, pagers e interpretadores costumam ser interessantes porque possuem comandos internos. Se um editor aparece no sudo -l, pesquise esse editor no GTFOBins e leia a seção sudo.

11.1 O que é uma shell?
C:\>shell_ □ ×

Por que abrir uma shell importa?

Shell é o programa que permite conversar com o sistema operacional por comandos.

Quando você usa um terminal Linux, normalmente está usando uma shell como bash, sh ou zsh.

Em um CTF, abrir uma shell significa conseguir executar comandos diretamente dentro da máquina alvo.

A parte importante para privesc é o contexto dessa shell. Se uma shell abre com permissões do usuário comum, você continua limitado. Se uma shell abre a partir de um programa executado como root, ela pode herdar esse contexto e virar uma shell privilegiada.

Shell comum

Executa comandos com as permissões do usuário atual.

Shell privilegiada

Executa comandos com permissões maiores, muitas vezes como root.

Impacto

Com root, é possível ler arquivos restritos, acessar diretórios protegidos e concluir a máquina.

Por isso GTFOBins dá tanta atenção para técnicas de Shell. O objetivo não é apenas abrir um terminal novo, mas abrir um terminal no contexto de privilégio errado.

12.1 Shell escape
C:\>privesc_ □ ×

Programas interativos podem chamar shell

Alguns programas interativos permitem executar comandos do sistema sem sair deles.

Isso é chamado de shell escape. Em contexto normal, é só uma funcionalidade. Em contexto de sudo ou SUID, pode virar privesc.

A lógica é simples: se um programa roda com permissão maior e ele consegue chamar uma shell, a shell pode abrir no mesmo contexto de privilégio.

Por isso, quando aparecer um editor, pager ou interpretador no sudo -l, procure por formas de shell escape desse programa.

Editores

vi, vim, nano, ed.

Pagers

less, more, man.

Interpretadores

python, perl, ruby, awk, lua.

Ferramentas

find, tar, zip, nmap antigo.

padrões comuns_ □ ×
# Dentro de alguns programas interativos, procure por padrões como:

:!comando
!/bin/sh
!/bin/bash
shell
sh
bash

# Em alguns casos, o programa também aceita executar comandos ao iniciar:
programa -c 'comando interno'
programa --command 'comando interno'

Essa lista não é uma receita universal. Ela serve para reconhecer o tipo de coisa que você deve procurar quando um programa interativo aparece em sudo -l.

12. Flags
C:\>objetivo_ □ ×

Leia e entregue com cuidado

CTF costuma ter uma user flag e uma root flag.

Depois de cada avanço, procure arquivos de flag nos diretórios esperados.

procurar flags_ □ ×
find / -iname "*flag*" 2>/dev/null
ls -la /home
ls -la /root 2>/dev/null

Se conseguir root, confirme com:

confirmar root_ □ ×
whoami
id
13. Se travar
C:\>debug_ □ ×

Volte para as evidências

Travar faz parte. O erro mais comum é insistir em uma hipótese fraca e ignorar informação já coletada.

Releia scans

Alguma porta ficou sem enumeração?

Refaça web

Algum diretório encontrado não foi explorado?

Pesquise versão

Nome + versão + CVE + exploit.

Teste credenciais

Usuário/senha podem servir em outro serviço.

Olhe arquivos

Configs e backups costumam ter pistas.

Enumere local

Depois do foothold, o jogo muda.

14. Cheat sheet geral
C:\>cola_ □ ×

Comandos mais usados

Referência rápida para a prática.

cheat sheet_ □ ×
# Organização
mkdir -p ~/ctf/maquina/{scans,exploits,files}
cd ~/ctf/maquina
touch notes.txt

# Nmap
nmap -sC -sV -oN scans/initial.txt IP
nmap -p- --min-rate 5000 -oN scans/all-ports.txt IP
nmap -sC -sV -p PORTAS -oN scans/targeted.txt IP

# Web
curl -i http://IP/
whatweb http://IP/
curl -s http://IP/robots.txt

# Fuzzing
ffuf -u http://IP/FUZZ -w /usr/share/wordlists/dirb/common.txt
gobuster dir -u http://IP/ -w /usr/share/wordlists/dirb/common.txt

# Searchsploit
searchsploit "NOME"
searchsploit "NOME" "VERSÃO"
searchsploit -x ID
searchsploit -m ID

# PoC
head -n 60 exploit.py
python3 exploit.py -h
pip install -r requirements.txt

# Credenciais
ssh usuario@IP
ftp IP
smbclient -L //IP/ -U usuario

# Foothold
whoami
id
hostname
uname -a
ls -la

# Privesc
sudo -l
find / -perm -4000 -type f 2>/dev/null
getcap -r / 2>/dev/null
cat /etc/crontab
ls -la /home
find / -iname "*flag*" 2>/dev/null

Shell escape

Se sudo -l mostrar editor, pager ou interpretador:

  1. Pesquise o binário no GTFOBins.
  2. Veja se ele tem Shell, sudo, SUID ou herda de outro binário.
  3. Procure padrões como :!comando, !/bin/sh, !/bin/bash ou opção -c.
15. Roteiro curto
C:\>resumo_ □ ×

Fluxo para seguir durante o CTF

  1. Crie pasta e arquivo de notas.
  2. Rode Nmap inicial e completo.
  3. Enumere cada serviço encontrado.
  4. Se tiver web, abra no navegador e rode fuzzing.
  5. Identifique aplicação, versão, paths e parâmetros.
  6. Pesquise PoCs e leia antes de executar.
  7. Use credenciais encontradas nos serviços certos.
  8. Depois do foothold, enumere localmente.
  9. Use GTFOBins quando encontrar sudo/SUID interessante.
  10. Procure user flag e root flag.