O fragmento de código a seguir recebe o nome de um arquivo...
Imagem de fundo

O fragmento de código a seguir recebe o nome de um arquivo...

O fragmento de código a seguir recebe o nome de um arquivo como parâmetro da linha de comando e mostra o seu conteúdo ao usuário. O script é configurado com setuid root, pois visa servir como uma ferramenta educacional para permitir que administradores de sistemas em treinamento examinem arquivos privilegiados do sistema, sem conceder-lhes a capacidade de alterá-los ou causar danos ao sistema.


int main(char* argc, char** argv) {

char cmd[CMD_MAX] = "/usr/bin/cat ";

strcat(cmd, argv[1]);

system(cmd);

}


Dado que o programa opera com privilégios de administrador, a função system() é igualmente executada com tais privilégios. Quando um usuário fornece um nome de arquivo padrão, a chamada funciona como esperado. Contudo, se um invasor inserir uma string como ";rm -rf /", a chamada system() falhará ao tentar executar o comando "cat" por falta de argumentos, resultando na tentativa subsequente de


A

excluir recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Denial of Service.


B

excluir recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Command Injection.


C

copiar recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Direct Dynamic Code Evaluation.


D

copiar recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Code Injection.


E

excluir recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Man-in-the-middle.