Por que a injeção de comando não funciona neste exemplo?

0

Por que a injeção de comando não funciona em

$ bash -c "ls \" bash '.; echo hello'
ls: cannot access '.;': No such file or directory
ls: cannot access 'echo': No such file or directory
ls: cannot access 'hello': No such file or directory

enquanto

$ bash -c "eval ls \" bash '.; echo hello'

funciona?

No primeiro comando, o primeiro bash executa a expansão de parâmetro em $1 , a divisão de palavras no resultado da expansão de $1 e, em seguida, executa os comandos?

Obrigado.

Originado de Formas de fornecer argumentos para um comando executado por 'bash -c'

relacionado a Por que essa injeção de código não está funcionando?

    
por Tim 08.06.2018 / 15:11

1 resposta

2

Este é o mesmo processo que em "execute qualquer comando que passe dados não confiáveis a comandos que interpretam argumentos como comandos" .

Seu primeiro comando,

bash -c "ls \" bash '.; echo hello'

é processado da seguinte forma:

  • bash é executado com os argumentos -c , ls $1 , bash , .; echo hello . o bash lê seus argumentos, observa a opção -c com o comando ls $1 e os argumentos extras bash e .; echo hello ;

  • quando o bash expande ls $1 , ele expande para ls com os argumentos .; , echo , hello e executa isso.

O ponto e vírgula teria que ser processado antes da expansão da variável para fazer com que o bash executasse dois comandos diferentes.

Seu segundo comando,

bash -c "eval ls \" bash '.; echo hello'

é processado da seguinte forma:

  • bash é executado com os argumentos -c , eval ls $1 , bash , .; echo hello . o bash lê seus argumentos, observa a opção -c com o comando eval ls $1 etc.

  • após a expansão, ele executa eval com os argumentos ls , .; , echo , hello ;

  • Em seguida,
  • eval faz com que os argumentos sejam analisados novamente, resultando na execução de ls . seguido por echo hello .

por 08.06.2018 / 15:19

Tags