Gerenciar redes e monitorar o fluxo de dados de 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 explorar 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ê quiser acompanhar, certifique-se de ter o seguinte.
- Dois computadores Linux: Um (ubuntu1) atua como host receptor, e outro (ubuntu2) serve como host de envio – Este tutorial utiliza o Ubuntu 20.04 para ambos os computadores.
Varredura de Portas Abertas
As portas são as portas de entrada que permitem o tráfego de rede entrar e sair de uma máquina. Quando uma porta está fechada, nenhum serviço está ouvindo nessa porta e nenhum tráfego pode passar por ela. Mas se a porta estiver aberta, sua rede está sujeita a ataques.
Se você deseja verificar se uma porta específica está aberta em uma máquina para qualquer vulnerabilidade de segurança, o Netcat está à altura da tarefa. Como um testador de penetração, você precisa saber quais portas estão abertas para realizar seu ataque. Seja qual for o motivo, a verificação de portas abertas é uma necessidade comum.
A sintaxe básica para varredura de portas usando o Netcat é a seguinte onde:
host
– é o endereço IP ou o nome do host da máquina que você deseja varrer.startport
– é o número da porta de início.endport
– é o número da porta final.
O comando netcat tem um alias de nc, que é útil para encurtar comandos. Mas este tutorial usa netcat para documentação adequada.
SSH para o seu host de envio (ubuntu2) e execute o seguinte comando para varrer as 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, o intervalo de portas 1-100
é suficiente. A maioria dos serviços usa números de porta padrão que geralmente estão dentro deste intervalo, como 22
para SSH, 80
para HTTP, etc.
A lista abaixo explica cada uma das bandeiras que controlam o comportamento da varredura de portas:
-z
(modos de E/S zero) – O Netcat não 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 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) foi bem-sucedida, mas todas as outras portas falharam.

Como o comando netcat
lista todas as portas escaneadas, você obtém muitas informações e algumas que você não precisa. Nesse caso, execute o comando abaixo, redirecionando 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, conforme esperado.

Enviando Arquivos de Forma Segura Entre Hosts
Além da varredura de portas, o Netcat possibilita a transferência segura de arquivos 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 ouvir na porta 4444 na máquina receptora (ubuntu1).
Este comando não tem uma saída, mas as opções abaixo afetam como o comando configura a porta de escuta:
-l
– diz aonetcat
para escutar uma conexão de entrada na porta TCP especificada. A porta pode ser qualquer número que você queira, mas certifique-se de que outros serviços não estejam usando sua porta preferida.
>
– diz ao netcat para redirecionar todos os dados de entrada para um arquivo no caminho especificado (
Somente 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 você 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 < é usada para dizer ao netcat para pegar a entrada do arquivo especificado.
4. Por último, mude para o host de recebimento (ubuntu1) e execute o comando cat abaixo para verificar o conteúdo do ata_file.
Você pode ver a mensagem “Hello from ATA” abaixo, indicando que a transferência funcionou.

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ê precisará compactar o diretório primeiro, depois enviá-lo 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 entrar (cd) nesse 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 gera saída, mas as flags tar xf – recebem 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 geram saída, mas você verificará se a transferência funcionou na etapa seguinte.
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 Disco ou Partição para Outro Host
Enviar todo o disco ou partição para outro host pode parecer ambicioso, mas essa tarefa é realizável, além de enviar arquivos e diretórios. Esse feito é útil, especialmente se você precisa 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 ouvir na porta 4444. Esse 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 abaixo fdisk para encontrar todos os discos e partições na 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) via porta 4444.
Comprimir e enviar a partição para o host receptor leva um tempo, dependendo do tamanho da partição.
4. Quando 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, pois /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 foram 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 uma dor de cabeça. Em vez disso, crie um servidor web mínimo com o Netcat para identificar rapidamente problemas de servidor web.
Para criar um servidor web mínimo:
1. Mude para o host recebido 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 do Netcat irá servir.
3. Crie um arquivo de script shell chamado httpresponse.sh no diretório /root/nc-webserver-docroot/ 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 uma 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 por 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 do Ncat aberto mesmo após a primeira conexão ser fechada. Essa opção é útil se você estiver testando seu servidor web com vários clientes.
Você verá a seguinte saída assim que o servidor web Netcat estiver em execução e ouvindo na porta 7777 em todas as interfaces de rede disponíveis.

6. Agora, abra outro terminal e execute o seguinte comando para testar o 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 fim, 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 a conectividade da sua 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 utilidade de rede!
Com esse conhecimento recém-adquirido, por que não aprimorar ainda mais suas habilidades de rede e se tornar um usuário avançado em Segurança Cibernética?