OSEE key terms
OSEE · Get comfortable with the vocabulary.
- Stack buffer overflow
- Related: Return address overwrite, Stack canary, NOP sled
A memory-safety flaw where a program writes more bytes into a fixed-size stack buffer than it can hold, overwriting adjacent locals, saved frame pointers, and the return address so control flow can be redirected.
- Return address overwrite
- Related: Stack buffer overflow, EIP/RIP control, ROP chain
The classic exploitation step in which an overflow on the stack replaces the saved return address with an attacker-chosen value, so the function's epilogue jumps to code the attacker selected.
- EIP/RIP control
- Related: Return address overwrite, Offset calculation
The condition in which an attacker can set the instruction pointer to an arbitrary value, usually the prerequisite for redirecting execution to shellcode, a ROP chain, or an existing function.
- Offset calculation
- Related: Cyclic pattern, EIP/RIP control, Crash triage
Determining exactly how many input bytes are needed to reach a saved return address or another overwritten field, often done with a cyclic pattern and reading the crash value from a debugger or core dump.
- Cyclic pattern
- Related: Offset calculation, Crash triage
A non-repeating byte sequence of known layout used to fill a buffer so the value observed in a crashed register or stack slot reveals the exact offset at which the overwrite occurred.
- NOP sled
- Related: Shellcode, Stack buffer overflow
A long run of no-operation instructions placed before shellcode so an imprecise jump landing anywhere inside the run slides execution forward to the payload, tolerating address uncertainty.
- Shellcode
- Related: NOP sled, Egg hunter, Encoder/stub
Position-independent machine code an exploit injects or reuses to perform an action such as spawning a shell, reading a file, or connecting back to the attacker, written without null bytes when needed.
- Egg hunter
- Related: Shellcode, Stack pivot
A very small payload that scans memory for a larger tagged payload (the egg) and jumps to it, used when the space available for injected code is too small to hold the full shellcode.
- Stack canary
- Related: Stack buffer overflow, Stack protector bypass, Format string
A random sentinel value placed between local buffers and saved control data; the function checks it before returning, and a mismatch aborts the process, blocking simple linear overflows.
- Stack protector bypass
- Related: Stack canary, Information leak, Format string
Techniques that defeat canaries, including leaking the canary through an info leak, overwriting it via an arbitrary write, or targeting data that is not protected such as saved pointers or exception structures.
- ASLR
- Related: Information leak, Return-to-libc, Partial overwrite
Address space layout randomization: the operating system randomizes base addresses of the stack, heap, libraries, and sometimes the executable, so hard-coded exploit addresses are unreliable across runs.
- DEP/NX
- Related: Return-oriented programming, Return-to-libc, mprotect
Data execution prevention, also called no-execute, marks writable memory such as the stack and heap non-executable, so injected shellcode cannot run and attackers must reuse existing executable code.
- Return-to-libc
- Related: DEP/NX, Return-oriented programming, Gadget
An exploitation technique that overwrites a return address with the address of a library function such as system or execve, arranging arguments on the stack, to run code without injecting executable bytes.
- Return-oriented programming
- Related: Gadget, ROP chain, DEP/NX
A code-reuse technique that chains short instruction sequences ending in a return, each called a gadget, to build arbitrary computation while defeating non-executable memory protections.
- Gadget
- Related: Return-oriented programming, ROP chain, Gadget finder
A short sequence of existing instructions ending in a return or indirect jump that performs a small useful operation, such as loading a register or making a syscall, when entered at its chosen offset.
- ROP chain
- Related: Gadget, Return-oriented programming, Stack pivot
An ordered list of gadget addresses and data placed on the stack so that successive returns execute each gadget in turn, typically to set up registers and invoke a syscall or function.
- Gadget finder
- Related: Gadget, ROP chain
A tool that scans executable sections or libraries for byte sequences that decode to useful instructions followed by a return, jump, or call, and reports their addresses and side effects.
- Stack pivot
- Related: ROP chain, Egg hunter, Heap spray
Changing the stack pointer to a region the attacker controls, such as a heap buffer, so a ROP chain or fake stack can be executed when the original overflow space is too small.
- Format string vulnerability
- Related: Information leak, Arbitrary write, Stack canary
A flaw where user input is passed directly as a format argument, letting the attacker use conversion specifiers to read stack values, write to arbitrary addresses with %n, or crash the process.
- Information leak
- Related: ASLR, Format string vulnerability, Partial overwrite
Any bug that discloses memory contents or addresses to the attacker, such as an uninitialized buffer, out-of-bounds read, or format string, and is often what makes ASLR and canaries beatable.
- Partial overwrite
- Related: ASLR, Information leak
Overwriting only the low bytes of a pointer or return address so the high, randomized bytes stay valid, allowing a redirect within the same page or region without knowing the full address.
- Heap overflow
- Related: Use-after-free, Heap grooming, Tcache poisoning
A write past the end of a heap-allocated buffer that corrupts adjacent chunk metadata or neighboring objects, potentially leading to arbitrary write or control-flow hijack during allocation or free.
- Use-after-free
- Related: Heap overflow, Heap grooming, Type confusion
A bug where memory is freed but still referenced; if the attacker can reallocate that chunk with controlled data, later use of the stale pointer operates on attacker-chosen contents, often a vtable or function pointer.
- Heap grooming
- Related: Heap overflow, Use-after-free, Heap spray
Deliberately arranging allocations and frees so that a target object lands next to, or reuses, a chunk the attacker controls, making a heap corruption primitive reliable instead of probabilistic.
- Heap spray
- Related: Heap grooming, Stack pivot
Filling large parts of the heap with repeated copies of a payload or fake structure so that a corrupted pointer or guessed address is likely to land on attacker-controlled data.
- Tcache poisoning
- Related: Heap overflow, Arbitrary write, Use-after-free
A glibc heap technique that corrupts a freed chunk's tcache next pointer so the next allocation returns an arbitrary address, giving a write-what-where primitive when combined with controlled data.
- Type confusion
- Related: Use-after-free, Virtual call hijack
A flaw where an object of one type is treated as another, so fields are interpreted at the wrong offsets and a value the attacker controls can be used as a pointer or function reference.
- Virtual call hijack
- Related: Type confusion, Use-after-free, Gadget
Overwriting an object's vtable pointer or a function pointer so that a later virtual dispatch calls an address the attacker chose, a common route from a memory bug to code execution.
- Arbitrary write
- Related: GOT overwrite, Format string vulnerability, Tcache poisoning
A primitive that lets the attacker store a chosen value at a chosen address; combined with a known target such as a function pointer or GOT entry, it usually yields code execution.
- GOT overwrite
- Related: Arbitrary write, Partial RELRO
Replacing a dynamic linker global offset table entry with an attacker address so the next call to that imported function jumps to attacker-chosen code, a classic target for write primitives.
- Partial RELRO
- Related: GOT overwrite, Arbitrary write
A linker hardening level where the global offset table remains writable after relocation, so a write primitive can redirect imported function calls; full RELRO makes the table read-only.
- Encoder/stub
- Related: Shellcode, Egg hunter
A small decoder routine prepended to encoded payload bytes; the decoder reconstructs the real shellcode at runtime, letting the payload avoid forbidden bytes such as nulls or pass signature checks.
- Crash triage
- Related: Offset calculation, Cyclic pattern
The first pass over a crashing input: reproducing it, checking which registers and memory were corrupted, and deciding whether the crash is exploitable or only a denial of service.
- Fuzzing
- Related: Crash triage, Offset calculation
Automated testing that feeds generated or mutated inputs to a target to find crashes and hangs, which are then triaged as potential memory-corruption vulnerabilities worth exploiting.
- mprotect
- Related: DEP/NX, Return-to-libc, ROP chain
A system call that changes page permissions; exploits sometimes call it to mark a writable region executable, restoring a place to run injected shellcode after bypassing non-executable memory.
- Sigreturn-oriented programming
- Related: ROP chain, Gadget, Stack pivot
A code-reuse attack that invokes a signal-return syscall with a forged frame on the stack, letting the attacker set nearly all registers at once with very few gadgets.
- Integer overflow
- Related: Heap overflow, Stack buffer overflow
Arithmetic that wraps past a type's range, producing a small or negative size; when that value drives allocation or bounds checks, it can lead to undersized buffers and subsequent memory corruption.
- Off-by-one
- Related: Heap overflow, Stack canary
A bounds error that writes exactly one byte past a buffer's end, enough to corrupt an adjacent length field, chunk size, or saved pointer and enable a larger follow-on exploit.