magic netcat para ouvir e enviar resultado

2

Estou tentando fazer com que netcat ouça para se conectar a uma máquina remota, execute o bash para cada texto que vem da máquina remota e envie o resultado do comando de volta para a máquina remota.

Sim. Totalmente hacky.

Eu meio que trabalhei assim:

Na minha máquina local, corro netcat -l -p 8765

Na máquina remota com firewall, eu corro netcat <ipofmylocalmachine> 8765 | bash -

Eu posso ver o resultado dos meus comandos quando faço um tail -f /tmp/output na máquina remota e insiro um echo "test" > /tmp/output

Mas como posso ver o resultado do comando bash na minha máquina local?

Eu posso fazer isso com Python e Perl, mas como isso pode ser feito usando apenas o bash?

Apenas como nota, estou ciente das explicações de shell reversas, como link , mas note que o que estou procurando é um pouco diferente. Em vez de abrir uma porta do servidor, a porta que está sendo aberta está no cliente, que não é de firewall.

    
por Alexandre Santos 17.02.2017 / 00:29

2 respostas

7

Basicamente, o que você quer fazer é conectar STDOUT do netcat ao STDIN do bash e STDOUT do bash ao STDIN do netcat.

O Bash tem vários métodos de lançar comandos, mas apenas uma maneira de iniciar um comando e poder ler o comando e escrever nele. Bash chama isso de coproc .

Então, vamos dar uma olhada no roteiro final que nos permitirá fazer o que queremos e depois vamos dissecá-lo.

#!/bin/bash
coproc netcat -l -p 8765
exec bash <&${COPROC[0]} >&${COPROC[1]} 2>&1

Assim, a primeira linha lança netcat em segundo plano, atribui STDOUT de netcat a um descritor de arquivo cujo número é armazenado ${COPROC[0]} e STDIN de netcat a um descritor de arquivo cujo número está armazenado em ${COPROC[1]}

Então, agora precisamos redirecionar esses descritores de arquivos para STDIN / STDOUT / STDERR do bash. No entanto, quando o bash está executando um script, ele está lendo os comandos do arquivo de script e não há como dizer a ele para alternar para a leitura de um descritor de arquivo. Então, re-exec bash com STDIN conectado a ${COPROC[0]} , STDOUT conectado a ${COPROC[1]} , e STDERR também conectado a ${COPROC[1]} .

    
por 17.02.2017 / 03:16
3

Você precisará do pacote netcat-traditional .

Basta usar o comando:

$ nc.traditional -le /bin/bash -p <port to listen>

Por exemplo:

nc.traditional -le /bin/bash -p 8888

Conecte e execute o ls , você poderá ver os arquivos.

    
por 17.02.2017 / 00:36

Tags