Execve Assembly Shellcode for 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"

然后我开始尝试根据 syscall 值编写 execve shellcode: 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"

不幸的是,程序没有得到 shell。我试过 /bin/ls 等,但它不能也没有工作。

我后来在一个 C 程序中调用了 execve,它成功运行了 /bin/ls 但没有运行 /bin/bash。 iOS 似乎不允许从系统或 execve 调用 /bin/bash。

我的问题;有什么办法解决这个问题吗?或者我怎样才能取得更大的进步?非常感谢。

更新

感谢 Siguza 的反馈,我可以有一个有效的 Assembly shellcode(在越狱设备上):

     .global _main
     .align 2
     .text

_main:
     // execve("/bin/sh",x1       // x1 = NULL
     eor    x2,59      // x16 = execve
     svc    0

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

解决方法

您在非 Linux 内核上使用 Linux 系统调用号。
XNU (source) 下的 Execve 是 59

但除非您处于越狱环境中,否则您将不会拥有 /bin/ls/bin/bash,沙箱也不会让您execve 任何东西。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...