Этот пример может помочь вам понять, использование execve() ARGV и envp
$ кошка A.Sh
#!/bin/sh
echo "value of PWDIR is $PWDIR"
echo "first arg = $1"
echo "second arg = $2"
printenv
/* execve.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char *newargv[] = { NULL, "hello", "world", NULL };
char *newenviron[] = {"PWDIR=/home/root" };
if (argc != 2) {
fprintf(stderr, "Usage: %s <file-to-exec>\n", argv[0]);
exit(EXIT_FAILURE);
}
newargv[0] = argv[1];
execve(argv[1], newargv, newenviron);
perror("execve"); /* execve() only returns on error */
exit(EXIT_FAILURE);
}
Составление кода
$ cc execve.c -o execve
Выполнение кода и вывода следующего
$ ./execve a.sh
value of PWDIR is /home/root
first arg = hello
second arg = world
PWDIR=/home/root
PWD=/home/arul/work/images/samples
Переменная среды передается в execve используются в сценарии оболочки. Также обратите внимание, что при выполнении скрипта здесь будет создана отдельная оболочка.
Какой вид вы имели в виду? Любой подвиг? Недостаток безопасности? – Paulo
Я хочу открыть/bin/sh с помощью шеллкода. Предположим, что я знаю местоположение адреса возврата в стеке, и у меня есть код оболочки, и я должен использовать envp для его использования. –
Есть ли еще одна вещь, которую вы хотите задать по этому вопросу? –