Writeups de CTF
Olá, sou o Sean e gosto de resolver problemas de CTF no meu tempo livre. A minha
posição atual envolve muita exploração binária e engenharia reversa de software,
por isso costumo focar nessas categorias. A maioria dos writeups que vejo
online são uma porcaria e espero que estes façam um trabalho melhor ao explicar
alguns dos conceitos fundamentais.
Em todas as minhas soluções, faço o meu melhor para incluir uma solução
reproduzível escrita com pwntools. Não se trata das flags, mas da jornada que nos
levou até à flag.
Espero que isto não envelheça mal, mas também tentei fazer alguns vídeos a
explicar alguns desses problemas de CTF. Podes vê-los no
YouTube.
A seguir está uma lista de tópicos comuns de acesso ao Unix e os desafios de CTF
relacionados.
Conhecimento de Acesso ao Unix
Classes de Vulnerabilidade
Demonstrar a capacidade de explorar classes de vulnerabilidade
- Escrever shellcode funcional a partir do zero e mostrar todos os passos para
escrever o shellcode:
- Buffer overflow na stack com e sem as seguintes mitigações: randomização do
layout do espaço de endereçamento (ASLR), memória Não-Executável (NX) e canários
de stack:
- Buffer overflow na heap usando heap grooming e objetos com ponteiros para
funções:
- Buffer overflow na heap ao corromper estruturas de dados da heap:
- UAF com objetos que contêm ponteiros para funções:
- UAF com objetos que permitem uma primitiva arbitrária de leitura/escrita:
- Vulnerabilidades de confusão de tipos de dados
- Vulnerabilidades de format string para primitiva arbitrária de leitura/escrita:
- Como variáveis não inicializadas podem ser usadas para exploração:
Demonstrar a capacidade de implementar primitivas de exploração
- Primitiva de escrita arbitrária:
- Primitiva de escrita relativa:
- Primitiva de leitura arbitrária:
- Como primitivas podem ser encadeadas para construir um exploit
- Como uma primitiva de escrita pode ser usada para escalar privilégios/executar
código arbitrário:
Descrever o propósito e a estrutura das seguintes estruturas de ligação ELF e como podem ser abusadas na exploração binária
- Procedural Linkage Table:
- Global Offset Table:
Descrever os seguintes modos de relocação dinâmica em termos da interação entre as estruturas de dados PLT/GOT e como as primitivas de exploração diferem entre eles
- Partial RELRO:
- Full RELRO:
Demonstrar a capacidade de implementar ROP/JOP para
- Encontrar gadgets ROP/JOP:
- Chamar funções da libc e chamadas de sistema:
- Encadear gadgets para executar código:
- Executar shellcode arbitrário
Descrever o propósito e a implementação de mitigações de exploração
- ASLR
- Data Execution Prevention (DEP)/NX:
- Position Independent Executables (PIEs)
- Como os PIEs afetam a exploração
- Canários de stack:
- Safe list unlinking
Engenharia Reversa de Software
Comparar e contrastar técnicas e casos de uso de
- Engenharia reversa estática:
- Engenharia reversa dinâmica:
Demonstrar familiaridade no uso dos seguintes tipos de ferramentas para realizar engenharia reversa estática e dinâmica
- Desassembladores estáticos
- Depuradores
- Técnicas de automação usando as ferramentas acima
Técnicas de fuzzing
- Técnicas de fuzzing cego
- Fuzzing baseado em cobertura de código
- Execução simbólica
Posts de Blog de CTF que Considero Úteis