Como este comando funciona? mkfifo / tmp / f; cat / tmp / f | / bin / sh -i 2 e 1 | nc -l 1234 / tmp / f

3

Hoje eu estava lendo a página nc man e tropecei nesse comando. Eu sei disso:

  • mkfifo /tmp/f está criando um canal nomeado em / tmp / f .

  • cat /tmp/f está imprimindo o que está escrito nesse pipe nomeado e a saída de cat /tmp/f foi canalizada para /bin/sh

  • /bin/sh está sendo executado de forma interativa e stderr é redirecionado para stdout.
  • 'a saída é então canalizada para nc que está escutando na porta 1234
  • e a saída é finalmente redirecionada para o pipe nomeado novamente.

quando executado, conectando-se ao servidor remoto naquela porta, ou seja, 1234 abre um prompt de shell e o cliente pode executar comandos arbitrários. Mas como isso funciona dessa maneira?

    
por The-null-Pointer- 24.11.2017 / 00:59

1 resposta

3

Esse comando está aproveitando o redirecionamento de E / S e o modo interativo sh, que é ativado por padrão quando conectado a um TTY.

Note que o gato fica aberto em um FIFO. Essa é sua primeira pista. Quando sh executa tudo o que já está fazendo, está direcionando seu stdout e strerr para o TTY. Em vez disso, sh não está anexado a um TTY. Normalmente, sh entra automaticamente no modo interativo quando conectado a um TTY, mas como não é a opção -i, é adicionado. Isso significa que ele continuará recebendo informações para novos comandos. A saída desses comandos é direcionada para o stdin de nc e a saída de nc (que são os comandos vindos da rede) é redirecionada para o FIFO.

O FIFO está essencialmente sendo usado como um pipe nomeado para completar o anel de redirecionamento.

Você pode pensar mais simplesmente como sh e nc estão redirecionando um ao outro em um loop. O resto do comando é apenas fluff.

    
por 24.11.2017 / 03:15