Writeup di CTF
Ciao, sono Sean e mi piace fare problemi CTF nel mio tempo libero. La mia attuale posizione mi porta a fare molto binary exploitation e reverse engineering del software, quindi tendo a concentrarmi su queste categorie. La maggior parte dei writeup che vedo online fanno schifo e spero che questi facciano un lavoro migliore nello spiegare alcuni dei concetti fondamentali.
In tutte le mie soluzioni cerco di includere una soluzione riproducibile scritta con pwntools. Non si tratta delle flag, ma del percorso che ci ha portato alla flag.
Spero che questo non invecchi come il latte, ma ho anche provato a fare alcuni video walkthrough di alcuni di questi problemi CTF. Puoi vederli su YouTube.
Di seguito è riportato un elenco di argomenti comuni di Unix Access e le sfide CTF ad essi correlate.
Conoscenze di Unix Access
Classi di vulnerabilità
Dimostrare la capacità di sfruttare classi di vulnerabilità
- Scrivere shellcode funzionante da zero e mostrare tutti i passaggi per scrivere lo shellcode:
- Stack buffer overflow con e senza le seguenti mitigazioni: randomizzazione del layout dello spazio degli indirizzi (ASLR), memoria Non-eXecutable (NX) e stack canaries:
- Heap buffer overflow usando heap grooming e oggetti con puntatori a funzione:
- Heap buffer overflow corrompendo le strutture dati dello heap:
- UAF con oggetti contenenti puntatori a funzione:
- UAF con oggetti che consentono una primitiva arbitraria di lettura/scrittura:
- Vulnerabilità di data type confusion
- Vulnerabilità di formato stringa per primitive arbitraria di lettura/scrittura:
- Come le variabili non inizializzate possono essere utilizzate per lo sfruttamento:
Dimostrare la capacità di implementare primitive di sfruttamento
- Primitiva di scrittura arbitraria:
- Primitiva di scrittura relativa:
- Primitiva di lettura arbitraria:
- Come le primitive possono essere concatenate per costruire un exploit
- Come una primitiva di scrittura può essere utilizzata per elevare i privilegi/eseguire codice arbitrario:
Descrivere lo scopo e la struttura delle seguenti strutture di linking ELF e come possono essere abusate nello sfruttamento binario
- Procedural Linkage Table:
- Global Offset Table:
Descrivere le seguenti modalità di rilocazione dinamica in termini di interazione con le strutture dati PLT/GOT e come le primitive di sfruttamento differiscono tra di esse
- Partial RELRO:
- Full RELRO:
Dimostrare la capacità di implementare ROP/JOP per
- Trovare gadget ROP/JOP:
- Chiamare funzioni libc e system call:
- Concatenare gadget per eseguire codice:
- Eseguire shellcode arbitrario
Descrivere lo scopo e l'implementazione delle mitigazioni per lo sfruttamento
- ASLR
- Data Execution Prevention (DEP)/NX:
- Position Independent Executables (PIE)
- Come i PIE influenzano lo sfruttamento
- Stack canaries:
- Safe list unlinking
Reverse Engineering del Software
Confrontare e contrapporre tecniche e casi d'uso di
- Reverse engineering statico:
- Reverse engineering dinamico:
Dimostrare familiarità nell'uso dei seguenti tipi di strumenti per eseguire reverse engineering statico e dinamico
- Disassemblatori statici
- Debugger
- Tecniche di automazione che utilizzano gli strumenti sopra
Tecniche di fuzzing
- Tecniche di fuzzing stupido
- Fuzzing basato sulla copertura del codice
- Esecuzione simbolica
Post del Blog CTF che Trovo Utili