Writeups de CTF
Hola, soy Sean y disfruto resolviendo problemas de CTF en mi tiempo libre. Mi
puesto actual implica mucho trabajo de explotación binaria e ingeniería inversa
de software, así que tiendo a centrarme en esas categorías. La mayoría de los
writeups que veo en línea apestan y espero que estos hagan un mejor trabajo
explicando algunos de los conceptos fundamentales.
En todas mis soluciones intento incluir una solución reproducible escrita con
pwntools. No se trata de las flags, sino del recorrido que nos llevó a obtener
la flag.
Esperemos que esto no envejezca mal, pero también he intentado hacer algunos
walkthroughs en video de algunos de estos problemas de CTF. Puedes verlos en
YouTube.
A continuación se presenta una lista de temas comunes de acceso a Unix y los
desafíos de CTF relacionados con ellos.
Conocimientos de acceso a Unix
Clases de vulnerabilidades
Demostrar la capacidad de explotar clases de vulnerabilidades
- Escribir shellcode funcional desde cero y mostrar todos los pasos para
escribir el shellcode:
- Desbordamiento de búfer en la pila con y sin las siguientes mitigaciones:
aleatorización del diseño del espacio de direcciones (ASLR), memoria no
ejecutable (NX) y canarios de pila:
- Desbordamiento de búfer en el heap mediante heap grooming y objetos con
punteros a funciones:
- Desbordamiento de búfer en el heap corrompiendo estructuras de datos del
heap:
- UAF con objetos que contienen punteros a funciones:
- UAF con objetos que permiten una primitiva de lectura/escritura arbitraria:
- Vulnerabilidades de confusión de tipos de datos
- Vulnerabilidades de cadena de formato para primitiva de lectura/escritura
arbitraria:
- Cómo se pueden utilizar variables no inicializadas para la explotación:
Demostrar la capacidad de implementar primitivas de explotación
- Primitiva de escritura arbitraria:
- Primitiva de escritura relativa:
- Primitiva de lectura arbitraria:
- Cómo se pueden encadenar primitivas para construir un exploit
- Cómo se puede utilizar una primitiva de escritura para escalar
privilegios/ejecutar código arbitrario:
Describir el propósito y la estructura de las siguientes estructuras de enlazado de ELF y cómo pueden ser abusadas en la explotación binaria
- Procedural Linkage Table:
- Global Offset Table:
Describir los siguientes modos de reubicación dinámica en términos de la interacción de las estructuras de datos PLT/GOT, y cómo difieren las primitivas de explotación entre ellos
- Partial RELRO:
- Full RELRO:
Demostrar la capacidad de implementar ROP/JOP para
- Encontrar gadgets de ROP/JOP:
- Llamar a funciones de libc y llamadas al sistema:
- Encadenar gadgets para ejecutar código:
- Ejecutar shellcode arbitrario
Describir el propósito y la implementación de las mitigaciones de explotación
- ASLR
- Data Execution Prevention (DEP)/NX:
- Position Independent Executables (PIEs)
- Cómo afectan los PIE a la explotación
- Canarios de pila:
- Desenlazado seguro de listas
Ingeniería inversa de software
Comparar y contrastar técnicas y casos de uso de
- Ingeniería inversa estática:
- Ingeniería inversa dinámica:
Demostrar familiaridad en el uso de los siguientes tipos de herramientas para realizar ingeniería inversa estática y dinámica
- Desensambladores estáticos
- Depuradores
- Técnicas de automatización usando las herramientas anteriores
Técnicas de fuzzing
- Técnicas de fuzzing ciego
- Fuzzing basado en cobertura de código
- Ejecución simbólica
Publicaciones de blog de CTF que me resultan útiles