Shellcode:执行2 execve()调用

问题描述:

我想在汇编中编写shellcode。我需要执行一个/usr/bin/killall命令和一个/usr/bin/wget命令。我的两个命令都可以通过shellcode与系统调用execve()完美配合。但是现在我想合并这两个,但这是不可能的,因为当第一个execve()调用被执行时程序退出。 (来自execve()的手册页:execve()未成功返回)。Shellcode:执行2 execve()调用

如何执行2 execve()调用?还是有另一种方法可以从相同的shell代码中调用/usr/bin/killall/usr/bin/wget

欢迎和感谢提前!

+0

为什么你要“在汇编中编写shell代码”?通常你会用C编写并编译它。连续运行两个命令是shell的设计目的,并且在汇编时将会提供很小的收益...... – Jens 2013-04-06 15:10:33

+0

使用fork,然后if和两个execves。 – AbiusX 2013-11-26 19:08:02

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

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

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