Я пытаюсь выполнить программу (скажем, target.c), которая имеет следующийболее чем одной команды для системного вызова в Linux
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);
};
Теперь я пытаюсь получить оболочку, вызывая его из другой программы (важно, чтобы вызвать из другой программы показано ниже:
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()");
}
}
Мой вопрос, когда я пытаюсь выполнить цель и предоставить аргументы командной строки что-то,/бен/ш, то я получаю скорлупу, но не в случае вызова от execve. Любая помощь была бы действительно оценена
Хорошо здесь выход:
[[email protected] targets]$ ./target1 ds;/bin/sh
ls: ds: No such file or directory
sh-2.05$
выше программа добавляет строку ввода пользователя на Ls и передает его в систему, следовательно, система (LS дц,/бен/ш "дает мне оболочку
Но когда я пытаюсь сделать то же самое с execve из другой программы (вторая программа), она не работает. говорит, что каталог «ds» не найден
Я пробовал использовать && между аргументами (как предлагалось в другом сообщении), и это все еще не работает! И я сожалею о плохом форматировании! – proteann
Прошу прощения. Я думаю, вам нужно быть более ясным в отношении ошибки, которую вы испытываете. Можете ли вы вставлять результат при попытке запустить программу и как ее запустить? – mattias
Спасибо за ваш ответ! Я обновил выход, мне очень жаль, потому что я должен скоро это сделать! Я переформатирую, как только закончу это задание. – proteann