Stack 0
Last updated
Last updated
By looking at the source code we see that to solve Stack 0 we need to find a way to set the modified
variable to not 0
. At line 8, a character array of 64 bytes is set, then modified is set to 0 and the program calls the gets
function at line 11 which stores our user input.
Looking at the gets
man page we can see that is a vulnerable function.
We run the binary on GDB, set the disassembly syntax to Intel with the command set disassembly-flavor intel
and disassemble main with the command disas main
.
Above we can see the instruction where modified
is set to 0 before the call to the gets
function, and after that modified
is there stored on eax
and then tested if its 0 with the instruction test eax, eax
.
We place a breakpoint at the address after the gets
function and provide some A
as input. What we want to analyse is where our A
's are placed on the stack, and what is the value of esp+0x5c
which is our modified variable, as well as if we can change it.
The first thing we notice is that our A
's show up in the stack represented by their hexadecimal value 0x41
. Then when we see the content of esp+0x5c
we can see that its still 0
, but we can see where it is stored on the stack. We count how many more character we need to overwirte the modified
variable to overwrite the 64 char array and overflow the variable. So let's try it.
We have successfully modified the modified
variable. Using python we can modify the variable through the command line.