CTF-Lösungsberichte
Hallo, ich bin Sean und ich löse in meiner Freizeit gerne CTF-Aufgaben. In meiner aktuellen Position beschäftige ich mich viel mit Binary Exploitation und Reverse Engineering, daher konzentriere ich mich meist auf diese Kategorien. Die meisten Lösungsberichte, die ich online sehe, sind schlecht, und ich hoffe, dass diese hier die grundlegenden Konzepte besser erklären.
In all meinen Lösungen bemühe ich mich, eine reproduzierbare Lösung mit pwntools zu erstellen. Es geht nicht um die Flags, sondern um den Weg, der uns zur Flagge geführt hat.
Hoffentlich altert das nicht wie Milch, aber ich habe auch versucht, einige Video-Walkthroughs zu einigen dieser CTF-Probleme zu machen. Du kannst sie auf YouTube ansehen.
Im Folgenden findest du eine Liste gängiger Unix-Zugriffsthemen und der dazugehörigen CTF-Herausforderungen.
Unix-Zugriffswissen
Schwachstellenklassen
Demonstriere die Fähigkeit, Schwachstellenklassen auszunutzen
- Schreibe funktionierenden Shellcode von Grund auf und zeige alle Schritte zum Schreiben des Shellcodes:
- Stack-Pufferüberlauf mit und ohne folgende Schutzmechanismen: Address Space Layout Randomization (ASLR), nicht ausführbarer Speicher (NX) und Stack-Canaries:
- Heap-Pufferüberlauf mittels Heap-Grooming und Objekten mit Funktionszeigern:
- Heap-Pufferüberlauf durch Beschädigung von Heap-Datenstrukturen:
- Use-After-Free (UAF) mit Objekten, die Funktionszeiger enthalten:
- Use-After-Free (UAF) mit Objekten, die eine beliebige Lese-/Schreibprimitive ermöglichen:
- Schwachstellen durch Datentypverwechslung
- Format-String-Schwachstellen für beliebige Lese-/Schreibprimitive:
- Wie nicht initialisierte Variablen zur Ausnutzung verwendet werden können:
Demonstriere die Fähigkeit, Ausnutzungsprimitiven zu implementieren
- Beliebige Schreibprimitive:
- Relative Schreibprimitive:
- Beliebige Leseprimitive:
- Wie Primitiven zur Erstellung eines Exploits verkettet werden können
- Wie eine Schreibprimitive zur Rechteausweitung/Codeausführung verwendet werden kann:
Beschreibe den Zweck und die Struktur der folgenden ELF-Linking-Strukturen und wie sie bei Binary Exploitation missbraucht werden können
- Procedural Linkage Table (PLT):
- Global Offset Table (GOT):
Beschreibe die folgenden dynamischen Relocation-Modi im Hinblick auf die Interaktion der PLT/GOT-Datenstrukturen und wie sich die Ausnutzungsprimitiven zwischen ihnen unterscheiden
- Partial RELRO:
- Full RELRO:
Demonstriere die Fähigkeit, ROP/JOP zu implementieren, um
- ROP/JOP-Gadgets finden:
- libc-Funktionen und Systemaufrufe aufrufen:
- Gadgets verketten, um Code auszuführen:
- Beliebigen Shellcode ausführen
Beschreibe den Zweck und die Implementierung von Ausnutzungsschutzmaßnahmen
- ASLR
- Data Execution Prevention (DEP)/NX:
- Positionsunabhängige ausführbare Dateien (PIEs)
- Wie PIEs die Ausnutzung beeinflussen
- Stack-Canaries:
- Sicheres Listen-Unlinking (safe unlinking)
Software Reverse Engineering
Vergleiche und gegenüberstelle Techniken und Anwendungsfälle von
- Statisches Reverse Engineering:
- Dynamisches Reverse Engineering:
Zeige Vertrautheit mit der Verwendung der folgenden Arten von Werkzeugen zur Durchführung von statischem und dynamischem Reverse Engineering
- Statische Disassembler
- Debugger
- Automatisierungstechniken unter Verwendung der oben genannten Werkzeuge
Fuzzing-Techniken
- Dumme Fuzzing-Techniken (Dumb Fuzzing)
- Codeabdeckungsbasiertes Fuzzing
- Symbolische Ausführung
Nützliche CTF-Blogbeiträge