Шелл-код Execve Assembly для AARCH64 iOS Darwin

Недавно я пытался изучить программирование командной оболочки iOS. Я мог бы успешно написать простую программу Hello World на ассемблере следующим образом:

.global _main
.align 2

.text
_main:

   mov x0, 1
   mov x2, 14
   adr x1, hello_txt
   mov x16, 4
   svc 0


   mov x16, 1
   svc 0

hello_txt: .ascii "Hello, World!\n"

Затем я начал писать шелл-код execve на основе значений системных вызовов: https://thog.github.io/syscalls-table-aarch64/latest.html на основе этого образца: https://github.com/johnjohnsp1/shellcode-1/blob/master/os/linux/arm64/execve.s

.global _main
.align 2
.text

_main:
     // execve("/bin/sh", NULL, NULL);
     adr    x0, sh         // x0 = "/bin/sh"
     eor    x1, x1, x1     // x1 = NULL
     eor    x2, x2, x2     // x2 = NULL
     mov    x16, 221      // x16 = execve
     svc    0

sh:
     .ascii "/bin/sh\0"

К сожалению, программа не имеет оболочки. Я пробовал /bin/ls и т. д., но не мог и не работать.

Позже я вызвал execve из программы на C, она успешно запустила /bin/ls, но не запустила /bin/bash. Кажется, iOS не позволяет вызывать /bin/bash из системы или execve.

Мой вопрос; есть ли способ обойти это? Или как я могу прогрессировать больше? Большое спасибо.

ОБНОВИТЬ

Спасибо за отзыв Siguza, у меня может быть рабочий шеллкод сборки (на взломанном устройстве):

     .global _main
     .align 2
     .text

_main:
     // execve("/bin/sh", NULL, NULL);
     adr    x0, sh         // x0 = "/bin/sh"
     eor    x1, x1, x1       // x1 = NULL
     eor    x2, x2, x2     // x2 = NULL
     mov    x16, 59      // x16 = execve
     svc    0

sh:
     .ascii "/bin/bash\0"


person Yılmaz Değirmenci    schedule 25.04.2021    source источник
comment
execve возвращает ошибку, что он говорит? Есть ли в iOS, производной от BSD ОС, bash, оболочка проекта GNU?   -  person Margaret Bloom    schedule 25.04.2021
comment
Он говорит: Недопустимая инструкция: 4. Когда я отлаживаю его с помощью lldb, я вижу, что он не запускает системный вызов, но пытается продолжить по адресу sh label shell`sh и интерпретировать /bin/bash как код операции, таким образом, в конечном итоге терпит неудачу. Когда я добавляю код операции выхода: mov x16, 1 svc 0, он просто завершается без какого-либо эффекта.   -  person Yılmaz Değirmenci    schedule 25.04.2021
comment
Более вероятно, что системный вызов выполняется, но просто возвращается без успеха. Если вы проверите регистры, вы увидите код ошибки.   -  person Nate Eldredge    schedule 26.04.2021


Ответы (1)


Вы используете номера системных вызовов Linux на ядре, отличном от Linux.
Execve 59 находится в XNU (источник).

Но если вы не находитесь в взломанной среде, у вас не будет ни /bin/ls, ни /bin/bash, и песочница не позволит вам execve ничего.

person Siguza    schedule 25.04.2021
comment
Большое спасибо @Siguza, кстати, я слежу за вашими сообщениями, но они слишком сложны и сложны для меня, чтобы понять. :) - person Yılmaz Değirmenci; 25.04.2021