【问题标题】:Execve Assembly Shellcode for AARCH64 iOS Darwin为 AARCH64 iOS Darwin 执行程序集 Shellcode
【发布时间】:2021-04-25 18:05:08
【问题描述】:

最近我一直在尝试探索 iOS 命令 shell 编程。我可以成功编写一个简单的汇编“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 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", 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"

【问题讨论】:

  • execve 返回错误,它说什么? iOS,一个 BSD 派生的操作系统,有 bash,一个 GNU 项目外壳吗?
  • 它说:“非法指令:4”。当我用 lldb 调试它时,我看到它没有触发系统调用,而是尝试继续到 sh 标签“shell`sh”的地址并将“/bin/bash”解释为操作码,因此最终失败。当我附加退出操作码时: mov x16, 1 svc 0 它只是退出而没有任何效果。
  • 更有可能系统调用确实执行但只是返回而没有成功。如果你检查寄存器,你会看到一个错误代码。

标签: ios assembly arm64 shellcode execve


【解决方案1】:

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

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

【讨论】:

  • 非常感谢@Siguza,顺便说一句,我正在关注您的帖子,但它们对我来说太难理解了。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多