Nos*_*tap 3 c c++ linux execve
execve()究竟做了什么?我已经尝试过查看文档(http://linux.die.net/man/2/execve),但鉴于我对linux很新,这种编程方式并没有多大意义.我想要做的是能够执行此命令:
nc -l -p someport -e /bin/sh
Run Code Online (Sandbox Code Playgroud)
我可以做类似以下的事情(其中someport是一个数字,如4444)
char *command[2];
command[0] = "nc -l -p someport -e /bin/sh"
execve(command[0], name, NULL);
Run Code Online (Sandbox Code Playgroud)
Jer*_*fin 15
execve 用新进程替换当前进程,运行您指定为第一个参数的命令.
机会是相当不错的,你想execvp或execlp代替-你不是想为孩子的环境中提到什么,而是从事物的外表,你可能想要做的路径搜索以找到您所使用的可执行文件.
正确使用是
extern char * const environ[];
char * const command[] = {"nc", "-l", "-p", "porthere", "-e", "/bin/sh", NULL};
execve("/usr/bin/nc", command, environ);
Run Code Online (Sandbox Code Playgroud)
您必须使用完整路径名,而不是短名称"nc"(更确切地说:不进行PATH搜索,路径名必须是实际的现有文件),并且必须事先将参数拆分为单独的字符串.您还需要以某种方式传播环境,或者通过environ上面代码段中提到的extern 或者从第三个参数获得main(); 后者稍微有点标准,但根据需要可能会更加痛苦.