Comptes-rendus de CTF
Salut, je suis Sean et j'aime résoudre des problèmes de CTF pendant mon temps libre. Mon poste actuel m'amène à faire beaucoup d'exploitation binaire et de rétro-ingénierie logicielle, donc j'ai tendance à me concentrer sur ces catégories. La plupart des comptes-rendus que je vois en ligne sont mauvais et j'espère que ceux-ci feront un meilleur travail pour expliquer certains des concepts fondamentaux.
Dans toutes mes solutions, j'essaie au maximum d'inclure une solution reproductible écrite avec pwntools. Ce ne sont pas les flags qui comptent, mais le chemin qui nous a menés au flag.
J'espère que cela ne vieillira pas comme du lait, mais j'ai aussi essayé de faire quelques vidéos de démonstration de certains de ces problèmes de CTF. Vous pouvez les visionner sur YouTube.
Voici une liste de sujets courants sur l'accès Unix et les défis CTF qui s'y rapportent.
Connaissances sur l'accès Unix
Classes de vulnérabilités
Démontrer la capacité à exploiter des classes de vulnérabilités
- Écrire du shellcode fonctionnel à partir de zéro et montrer toutes les étapes pour écrire le shellcode :
- Débordement de tampon de pile avec et sans les atténuations suivantes : randomisation de l'espace d'adressage (ASLR), mémoire non exécutable (NX) et canaris de pile :
- Débordement de tampon tas en utilisant le grooming de tas et des objets avec des pointeurs de fonction :
- Débordement de tampon tas en corrompant les structures de données du tas :
- Use-Après-Libération (UAF) avec des objets contenant des pointeurs de fonction :
- UAF avec des objets permettant une primitive de lecture/écriture arbitraire :
- Vulnérabilités de confusion de type de données
- Vulnérabilités de chaîne de format pour une primitive de lecture/écriture arbitraire :
- Comment les variables non initialisées peuvent être utilisées pour l'exploitation :
Démontrer la capacité à implémenter des primitives d'exploitation
- Primitive d'écriture arbitraire :
- Primitive d'écriture relative :
- Primitive de lecture arbitraire :
- Comment les primitives peuvent être chaînées pour construire une exploitation
- Comment une primitive d'écriture peut être utilisée pour élever les privilèges/exécuter du code arbitraire :
- Table de liaison procédurale (PLT) :
- Table des décalages globaux (GOT) :
- RELRO partiel :
- RELRO complet :
Démontrer la capacité à implémenter ROP/JOP pour
- Trouver des gadgets ROP/JOP :
- Appeler des fonctions libc et des appels système :
- Chaîner des gadgets pour exécuter du code :
- Exécuter du shellcode arbitraire
Décrire le but et l'implémentation des atténuations d'exploitation
- ASLR
- Data Execution Prevention (DEP)/NX :
- Exécutables indépendants de la position (PIE)
- Comment les PIE affectent l'exploitation
- Canaris de pile :
- Déliement sécurisé de liste
Ingénierie inverse logicielle
Comparer et contraster les techniques et cas d'utilisation de
- Ingénierie inverse statique :
- Ingénierie inverse dynamique :
Démontrer une familiarité dans l'utilisation des types d'outils suivants pour effectuer de l'ingénierie inverse statique et dynamique
- Désassembleurs statiques
- Débogueurs
- Techniques d'automatisation utilisant les outils ci-dessus
Techniques de fuzzing
- Techniques de fuzzing aveugle
- Fuzzing basé sur la couverture de code
- Exécution symbolique
Articles de blog CTF que je trouve utiles