Как предотвратить попадание оболочки в сетенв - PullRequest
0 голосов
/ 27 января 2019

У меня есть следующий простой код 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;
}
...