4

execve() は正確に何をしますか? 私はドキュメント (http://linux.die.net/man/2/execve) を見てみましたが、Linux に非常に慣れていないため、この種のプログラミングはあまり意味がありません。私がやりたいことは、このコマンドを実行できるようにすることです:

nc -l -p someport -e /bin/sh

次のようなことはできますか (someport は 4444 などの番号です)

char *command[2];
command[0] = "nc -l -p someport -e /bin/sh"
execve(command[0], name, NULL);
4

2 に答える 2

17

execve最初の引数として指定したコマンドを実行して、現在のプロセスを新しいプロセスに置き換えます。

execvpおそらく、あなたが望むか、代わりにかなりまともですexeclp-あなたは子供に環境を提供したいことについて何も言及していませんが、物事の見た目から、あなたが使用している実行可能ファイルを見つけるためにパスを検索したいと思うでしょう。

于 2012-04-09T02:49:12.960 に答える
6

正しい使い方は

extern char * const environ[];
char * const command[] = {"nc", "-l", "-p", "porthere", "-e", "/bin/sh", NULL};
execve("/usr/bin/nc", command, environ);

"nc"(より正確には、検索は行われず、パス名は実際の既存のファイルである必要があります)などの短い名前ではなく、フルパス名を使用する必要PATHがあります。また、事前に引数を個別の文字列に分割する必要があります。environまた、上記のスニペットで言及されているexternを介して、またはmain();の3番目のパラメーターから取得されたように、何らかの方法で環境を伝播する必要があります。後者はもう少し標準に恵まれていますが、必要に応じて回すのはもっと苦痛かもしれません。

于 2012-04-09T02:48:43.570 に答える