【问题标题】:Shellcode: perform 2 execve() callsShellcode:执行 2 次 execve() 调用
【发布时间】:2013-04-05 09:00:54
【问题描述】:

我正在尝试在汇编中编写 shellcode。我需要执行/usr/bin/killall 命令和/usr/bin/wget 命令。我使用execve() 系统调用在shellcode 中完美运行这两个命令。但是现在我想将这两个结合起来,但是这是不可能的,因为在执行第一个execve() 调用时程序会退出。 (来自execve() 的手册页:execve() 不返回成功)。

如何执行 2 个execve() 调用?还是有其他方法可以从同一个 shell 代码中同时调用 /usr/bin/killall/usr/bin/wget

提前问候和感谢!

【问题讨论】:

  • 为什么要“在汇编中编写 shell 代码”?通常你会用 C 语言编写并编译它。连续运行两个命令是 shell 的设计目的,而在汇编中执行它几乎不会带来什么好处......
  • 使用 fork、then if 和两个 execves。

标签: c assembly buffer-overflow shellcode execve


【解决方案1】:

当您使用 exec 系列函数时,您调用它的程序会被替换到当前进程中。因此,当进行第一次 execve 调用时,您的整个过程映像就会消失,因此永远不会进行第二次调用。要解决这个问题,您必须在调用 execve 之前分叉另一个进程。

【讨论】:

    【解决方案2】:

    首先,不能一个接一个地执行两个execve()。原因很简单,根据定义,execve() 调用将用新进程覆盖原始进程的内存,您将永远无法再次切换回原始进程。

    如果killall 命令没有终止执行shellcode 本身的进程,那么您提出的第二个选项(将/usr/bin/killall/usr/bin/wget 合并到shellcode 中)是完全可能的。如果是这样的话,我真的需要更多关于为什么需要这种行为的信息,因为这对我来说似乎有点荒谬(但我肯定会错过你运行 shellcode 的上下文)。

    【讨论】:

      猜你喜欢
      • 2014-03-17
      • 1970-01-01
      • 2012-11-26
      • 2013-05-14
      • 1970-01-01
      • 2021-07-30
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多