Shellcode:执行2次execve()调用

时间:2013-04-05 09:00:54

标签: c assembly buffer-overflow shellcode execve

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

如何执行2次execve()来电?或者是否有另一种方法可以从同一个shell代码中调用/usr/bin/killall/usr/bin/wget

提前致谢并提前致谢!

2 个答案:

答案 0 :(得分:5)

当您使用exec-family函数时,您调用它的程序将替换为当前进程。因此,当第一次执行execve时,您的整个过程图像将消失,因此永远不会进行第二次调用。要解决这个问题,你必须在调用execve之前分叉另一个进程。

答案 1 :(得分:1)

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

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