Gerenciar redes e monitorar o fluxo de dados do tráfego entre sistemas parece intimidante. Bem, a menos que você saiba como usar o Netcat.
O Netcat é uma ferramenta de linha de comando que você pode usar para diversos fins, como varredura de portas, transferência de arquivos e criação de um servidor web mínimo para testar atividades de conexão. E neste tutorial, você aprenderá a aproveitar o Netcat ao passar por alguns dos casos de uso mais comuns.
Preparado? Continue lendo e aprimore suas habilidades de rede!
Pré-requisitos
Este tutorial será uma demonstração prática. Se você deseja acompanhar, certifique-se de ter o seguinte.
- Dois computadores com Linux: Um (ubuntu1) atua como host receptor, e outro (ubuntu2) serve como host de envio – Este tutorial usa o Ubuntu 20.04 para ambos os computadores.
Varredura de Portas Abertas
As portas são as entradas que permitem que o tráfego de rede entre e saia de uma máquina. Quando uma porta está fechada, nenhum serviço está ouvindo nessa porta, e nenhum tráfego pode passar. Mas se a porta estiver aberta, sua rede está sujeita a ataques.
Se você quiser verificar se uma porta específica está aberta em uma máquina para possíveis vulnerabilidades de segurança, o Netcat é adequado para a tarefa. Como testador de penetração, você precisa saber quais portas estão abertas para conduzir seu ataque. Seja qual for o motivo, a verificação de portas abertas é uma necessidade comum.
A sintaxe básica para escanear portas usando o Netcat é a seguinte onde:
host
– é o endereço IP ou nome do host da máquina que você deseja escanear.startport
– é o número da porta inicial.endport
– é o número da porta final.
O comando netcat tem um alias de nc, que é útil para encurtar comandos. Mas este tutorial utiliza netcat para uma documentação adequada.
SSH para seu host de envio (ubuntu2) e execute o seguinte comando para escanear portas abertas entre as portas 1-100
.
Ao longo deste tutorial, substitua 149.28.86.131 pelo endereço IP do seu host de envio.
Na maioria dos casos, a faixa de portas 1-100
é suficiente. A maioria dos serviços utiliza números de porta padrão que geralmente se encaixam nessa faixa, como 22
para SSH, 80
para HTTP, etc.
A lista abaixo explica cada uma das flags que controlam o comportamento da varredura de portas:
-z
(modos de E/S zero) – O Netcat não irá ler nem escrever na conexão de rede. Esta opção torna o processo de varredura mais rápido.-n
– Indica ao Netcat para desativar a busca de DNS para evitar atrasos.-v
– Faz o Netcat mostrar todos os processos de varredura de portas em detalhes.
Você pode ver abaixo que a conexão com a porta 22 (SSH) teve sucesso, mas todas as outras portas falharam.

Como o comando netcat
lista todas as portas varridas, você obtém muitas informações e algumas que você não precisa. Nesse caso, execute o comando abaixo, encaminhando o comando grep
. Este comando filtra apenas as portas abertas com a mensagem “succeeded!”
no final, como mostrado abaixo.
Abaixo, você pode ver que a porta 22 está aberta para conexão SSH como esperado.

Enviando Arquivos de Forma Segura Entre Hosts
Além da varredura de portas, o Netcat torna possível transferir arquivos de forma segura entre duas máquinas. O Netcat usa o protocolo TCP para transferência de arquivos, que é mais confiável que o UDP.
A sintaxe básica para enviar um arquivo usando o Netcat é a seguinte:
Para enviar arquivos do seu host para outra máquina:
1. Execute o comando abaixo para começar a escutar na porta 4444 no host de recebimento (ubuntu1).
Este comando não tem uma saída, mas as opções abaixo afetam como o comando define a porta de escuta:
-l
– indica aonetcat
para escutar uma conexão entrante na porta TCP especificada. A porta pode ser qualquer número desejado, mas certifique-se de que outros serviços não estejam usando a porta preferida.
> - indica ao netcat para redirecionar todos os dados de entrada para um arquivo no caminho especificado (ata_file).
Apenas o usuário root pode vincular a portas inferiores a 1000, então você deve selecionar uma porta maior que 1000 como usuário não root. Se tentar usar um número de porta inferior a 1000 como usuário não root, receberá o seguinte erro.

2. No host de envio (ubuntu2), execute o seguinte comando echo, que não tem uma saída, mas cria um arquivo chamado ata_file com o conteúdo Hello from ATA.
3. Agora, execute o comando netcat abaixo para enviar ata_file para o host de recebimento (ubuntu1). Certifique-se de usar o mesmo número de porta no host de recebimento (4444) que no host de envio.
Este comando não tem uma saída, mas a opção < diz ao netcat para pegar a entrada do arquivo especificado.
4. Por fim, mude para o host de recebimento (ubuntu1) e execute o comando cat abaixo para verificar o conteúdo do ata_file.
Você verá a mensagem Hello from ATA abaixo, indicando que a transferência foi bem-sucedida.

Enviando Diretórios para Outro Host
Até agora, você enviou com sucesso um único arquivo de um host para outro. Mas e se você quiser enviar um diretório inteiro com todos os seus subdiretórios e arquivos? O Netcat também pode enviar diretórios!
Suponha que você tenha um diretório de backup chamado apache_backup no host de envio (ubuntu2). Você terá que comprimir o diretório primeiro, depois enviar e extrair o diretório no host receptor (ubuntu1).
1. No host receptor (ubuntu1), execute o seguinte comando para criar um novo diretório chamado apache_backup e mova-se (cd) para esse diretório.

2. Em seguida, execute o comando abaixo para começar a ouvir na porta 4444 e extrair os arquivos compactados que o host de envio (ubuntu2) envia para o host receptor (ubuntu1).
Este comando não tem saída, mas as bandeiras tar xf – pegam a entrada do Netcat (entrada padrão) e extraem todos os arquivos para o diretório atual.
3. No host de envio (ubuntu2), execute os seguintes comandos para criar um diretório (apache_backup), alguns arquivos de texto e enviá-los para o host receptor (ubuntu1).
Esses comandos não têm saída, mas você verificará se a transferência funcionou no próximo passo.
4. Por fim, mude para o host receptor (ubuntu1), pressione Ctrl+C para parar de ouvir a porta 4444 e execute o comando ls para listar os arquivos dentro do diretório apache_backup.
Como você pode ver abaixo, os arquivos do diretório apache_backup foram transferidos com sucesso para o diretório apache_backup no host receptor.

Enviando Todo o Disco ou Partição para Outro Host
Enviando todo o seu disco ou partição para outro host pode parecer ambicioso, mas esta tarefa é realizável, além de enviar arquivos e diretórios. Esse feito é útil, especialmente se você precisar fazer backup de todo o disco antes de tomar medidas drásticas, como mover ou excluir toneladas de arquivos.
1. Execute o comando no host receptor (ubuntu1) para começar a escutar na porta 4444. Este comando não tem uma saída, mas descompacta todos os dados recebidos (bzip2 -d |dd) para /dev/sdb.
/dev/sdb é o seu segundo disco rígido na máquina. Mas, neste caso, /dev/sdb é um disco rígido vazio conectado a esta máquina para este tutorial.
2. No host de envio (ubuntu2), execute o comando fdisk abaixo para encontrar todos os discos e partições em sua máquina.
Como você pode ver abaixo, /dev/vda1/ é a partição raiz para o host de envio neste tutorial. Sua saída pode ser diferente, dependendo da configuração da sua máquina.

3. Execute o seguinte comando no host de envio (ubuntu2), que não tem uma saída, mas envia a partição /dev/vda1 para o host receptor (ubuntu1) através da porta 4444.
Compactar e enviar a partição para o host receptor leva um tempo, dependendo do tamanho da partição.
4. Assim que o processo estiver concluído, mude para o host receptor (ubuntu1) e você verá a saída abaixo.
O erro de espaço insuficiente no dispositivo é esperado, uma vez que /dev/vda1 provavelmente é maior que /dev/sdb. Mas você entendeu a ideia! Você pode usar o Netcat para enviar todo o seu disco rígido ou partição para outra máquina.

5. Finalmente, execute os comandos no host receptor (ubuntu1) para montar a partição /dev/vda1 e listar todos os arquivos na partição.
Como você pode ver abaixo, todos os arquivos e diretórios de /dev/vda1 são transferidos com sucesso para /dev/sdb.

Criando um Servidor Web Mínimo
Configurar um servidor web completo como Apache ou NGINX apenas para diagnosticar um problema de servidor web pode ser complicado. Em vez disso, crie um servidor web mínimo com o Netcat para identificar rapidamente problemas no servidor web.
Para criar um servidor web mínimo:
1. Mude para o host receptor e execute os comandos abaixo para criar um diretório raiz (nc-webserver-docroot) para o servidor web e um script shell (httpresponse.sh) que gera a resposta HTTP.

2. Em seguida, crie um arquivo index.html no diretório /root/nc-webserver-docroot/ com seu editor preferido e preencha o arquivo com o código abaixo. Este arquivo HTML contém o conteúdo que o servidor web Netcat irá fornecer.
3. Crie um arquivo de script shell chamado httpresponse.sh no /root/nc-webserver-docroot/ diretório e preencha o código abaixo.
Este script shell retorna o conteúdo do arquivo /root/nc-webserver-docroot/index.html como uma resposta HTTP para qualquer cliente que envie uma solicitação para o seu servidor web Netcat.
4. Agora, execute o comando chmod abaixo, que não tem saída, mas torna o arquivo httpresponse.sh executável (+x).
5. Execute o comando ncat abaixo para iniciar o servidor web Netcat na porta 7777.
Certifique-se de substituir a porta 7777 pelo número da porta de sua escolha, que não está sendo usado por nenhum outro serviço em seu sistema.
As seguintes opções afetam o comportamento de iniciar o servidor web Netcat:
-l
– indica ao Ncat para ouvir uma conexão de entrada.
-v
– habilita o modo verbose para mostrar todas as solicitações HTTP recebidas no seu terminal.
-c - especifica o caminho para o script httpresponse.sh que gera as respostas HTTP.
- -keep-open – mantém o ouvinte Ncat aberto mesmo após a primeira conexão ser fechada. Esta opção é útil se você testar seu servidor web com vários clientes.
Você verá a seguinte saída assim que o servidor web Netcat estiver em execução e ouvir na porta 7777 em todas as interfaces de rede disponíveis.

6. Agora, abra outro terminal e execute o seguinte comando para testar seu servidor web Netcat (http://localhost:7777).
A saída abaixo mostra que o servidor web Netcat está funcionando conforme o esperado e pode retornar o conteúdo do arquivo /root/nc-webserver-docroot/index.html como uma resposta HTTP.

7. Por último, volte para o terminal onde o servidor web Netcat está em execução. Você verá que o servidor web Netcat recebeu e processou a solicitação HTTP do cliente curl.
Parabéns! Você criou com sucesso um servidor web Netcat mínimo para testar sua conectividade de rede!

Conclusão
Neste tutorial, você aprendeu a usar o Netcat para aprimorar suas habilidades de rede e depuração. Você escaneou portas abertas, transferiu arquivos e criou um servidor web mínimo. E neste ponto, você agora pode resolver muitos problemas de rede do mundo real com esta poderosa ferramenta de rede!
Com este conhecimento recém-adquirido, que tal aprimorar ainda mais suas habilidades de rede e se tornar um usuário avançado em Cibersegurança?