Before starting to learn binary exploitation, one is recommended to learn at least:
- C
- Python
- x86 Assembly
- OS concepts (especially virtual memory layout)
- Debugging programs with gdb
- Introduction To Reverse Engineering With Radare2
- Reversing and Cracking first simple Program - bin 0x05
- Understand x86 Stack Frames
- checksec (RELRO, Stack, NX, PIE)
- ASLR vs PIE
- Static vs Dynamic Linking
- GOT, PLT, Lazy Binding
- Use buffer overflow to replace a return address
- ret2libc
- Chain functions with arguments
- Find gadgets
- Use readelf to find writable sections
- Stack pivoting
- x86_64 Return-to-csu (Universal ROP)