Como funciona esse comando? mkfifo /tmp/f; gato /tmp/f | /bin/sh -i 2>&1 | nc -l 1234 > /tmp/f

Como funciona esse comando? mkfifo /tmp/f; gato /tmp/f | /bin/sh -i 2>&1 | nc -l 1234 > /tmp/f

Hoje eu estava lendo a ncpágina de manual e me deparei com esse comando. Eu sei que:

  • mkfifo /tmp/festá criando um pipe nomeado em/tmp/f.

  • cat /tmp/festá imprimindo tudo o que está escrito naquele pipe nomeado e a saída de cat /tmp/ffoi canalizada para/bin/sh

  • /bin/shestá 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 canal nomeado novamente.

quando executado, conectar-se ao servidor remoto nessa porta, ou seja, 1234, abre um prompt de shell e o cliente pode executar comandos arbitrários. Mas como funciona assim?

Responder1

Esse comando aproveita o redirecionamento de IO e o modo interativo sh, que fica ativado por padrão quando conectado a um TTY.

Observe que o gato permanece aberto em um FIFO. Essa é a sua primeira pista. Quando sh é executado, tudo o que ele faz é direcionar 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 é adicionada. Isso significa que ele continuará recebendo informações para novos comandos. A saída desses comandos é direcionada para o stdin do nc e a saída do nc (que são os comandos vindos da rede) é redirecionada para o FIFO.

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

Você pode pensar nisso de forma mais simples, como sh e nc estão redirecionando um para o outro em um loop. O resto do comando é apenas superficial.

informação relacionada