Как предотвратить попадание оболочки в сетенв

У меня есть следующий простой код C

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
    setenv(key, value, 1);
    return 0;
}

И если выполнить это, как показано ниже,

./a.out TEST $(rm /)

Он просто удалит корень (допустим, что бинарный файл c имеет на это право). Теперь я могу предотвратить это, добавив qoutes('') к аргументу, как показано ниже

./a.out TEST '$(rm /)'

Я пытаюсь смоделировать то же самое внутри кода C (как показано ниже), но это не помогает, Есть идеи / помощь по достижению этого?

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{    
    char key[2048] = {0};
    char value[2048] = {0};
    snprintf(key, 2048, "'%s'", argv[1]);
    snprintf(value, 2048, "'%s'", argv[2]);
    setenv(key, value, 1);
   return 0;
}

0 ответов

Другие вопросы по тегам