2

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

如何进行 2 次execve()通话?还是有另一种方法可以从同一个 shell 代码/usr/bin/killall中调用两者?/usr/bin/wget

提前问候和感谢!

4

2 回答 2

5

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

于 2013-04-05T09:18:54.343 回答
1

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

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

于 2013-04-05T09:22:22.897 回答