выполнить системную команду (bash), используя сборку? - PullRequest
0 голосов
/ 05 февраля 2020

В основном я пытаюсь выполнить команду /bin/ls, используя сборку, но, к сожалению, у меня не получается:

SECTION .data
    buf: db "Hello", 5
SECTION .text
global _start

_start:
    xor eax, eax
    mov edx, eax
    push edx
    mov eax, 0x736c2f2f     ; "sl/"
    push eax
    mov eax, 0x6e69622f     ; "nib/"
    push eax
    mov ebx, esp
    push edx
    mov eax, 0x2f
    push eax
    mov ecx, esp
    mov eax, 11
    xor edx, edx
    int 0x80

    mov eax, 1
    int 0x80

Но если я изменю mov eax, 11 на mov eax, 4 и добавлю mov edx, 7 после xor edx, edx. Это печатает /bin/ls

Кто-нибудь может указать на ошибку, которую я делаю? Компиляция кода с nasm -g -f elf -F dwarf ./shell.asm && ld -m elf_i386 -o shell shell.o и мой ar c это Linux kali 5.2.0-kali2-amd64 #1 SMP Debian 5.2.9-2kali1 (2019-08-22) x86_64 GNU/Linux

1 Ответ

1 голос
/ 06 февраля 2020

Нашел проблему, как указал @Jestor (спасибо), мне нужно было сохранить исполняемый файл в ebx и все аргументы, включая имя файла в ecx, и установить edx в null, как показано ниже:

SECTION .data
buf: db "./", 0
SECTION .text
global _start

_start:
xor eax, eax
xor edx, edx
push eax
push long 0x736c2f2f    ; "sl/"
push long 0x6e69622f    ; "nib/"
mov ebx, esp
push eax
push byte 0x2f
mov esi, esp

push eax
push esi
push ebx
mov ecx, esp
mov eax, 0x0b
int 0x80

mov eax, 1
int 0x80

после моей рабочей оболочки ecx выглядело так:

(gdb) x/50x $ecx
0xffffd370:     0xffffd384      0xffffd37c      0x00000000      0x0000002f
0xffffd380:     0x00000000      0x6e69622f      0x736c2f2f      0x00000000
...