Leaking Data
Leaking Memory
Memory can be leaked by using:
%c: read a char off the stack.%d, %i, %x: read an int (4 bytes) off the stack.%x: read an int (4 bytes) in hex.%s: dereference a pointer and read out bytes until a null byte.
Controlling how much to leak
There are a few size parameters that can be used:
%x: leaks 4 bytes.%hx: leaks 2 bytes.%hhx: leaks 1 byte.%lx: leaks 8 bytes.%7$x: prints the 7th parameter (on the stack).- The
$operator within the format string is used to specify what parameter we are interested in! - The above instruction is to print the 7th parameter as a hex value!
- The
Demo

Non-Trivial Format String Vulnerabilities
Format strings are sometimes:
- Dynamically generated.
- Used for internal logic, as oppose to i/o functions, like
sprintf,snprintf, andsscanf. - Used for logging
fprintf. - Used for input
scanf.
All are exploitable.
