Como Usar o Netcat e Aprimorar Suas Habilidades de Rede!

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.
netcat options host startport-endport

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.
netcat -z -n -v 149.28.86.131 1-100

Você pode ver abaixo que a conexão com a porta 22 (SSH) teve sucesso, mas todas as outras portas falharam.

How to Use Netcat : Scanning for Open Ports

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.

netcat -z -n -v 149.28.86.131 1-100 2>&1 | grep succeeded

Abaixo, você pode ver que a porta 22 está aberta para conexão SSH como esperado.

Filtering the Successful Port Connection

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:

netcat options host port filename

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 ao netcat 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).
netcat -l 4444 > 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.

Getting “Permission denied” Error When Using Port Lower Than 1000

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.

echo "Hello from ATA" > ata_file

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.

netcat 149.28.86.131 4444 < ata_file

4. Por fim, mude para o host de recebimento (ubuntu1) e execute o comando cat abaixo para verificar o conteúdo do ata_file.

cat ata_file

Você verá a mensagem Hello from ATA abaixo, indicando que a transferência foi bem-sucedida.

Verifying the Transfer Worked

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.

mkdir apache_backup && cd apache_backup
Creating the apache_backup Directory

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.

netcat -l 4444 | tar xf -

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.

# Cria um diretório apache_backup e alguns arquivos de texto dentro
mkdir apache_backup && cd apache_backup && touch ata{1..5}.txt
# Comprime o diretório de trabalho e o envia para o host receptor
tar cf - . | netcat 149.28.86.131 4444

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.

ls

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.

Verifying Transferred Files on the Receiving Host

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.

netcat -l 4444 | bzip2 -d | dd of=/dev/sdb

2. No host de envio (ubuntu2), execute o comando fdisk abaixo para encontrar todos os discos e partições em sua máquina.

 fdisk -l

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.

Finding All Disks and Partitions

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.

bzip2 -c /dev/vda1 | netcat 149.28.86.131 4444

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.

Viewing the Sending Disk/Partition Process

5. Finalmente, execute os comandos no host receptor (ubuntu1) para montar a partição /dev/vda1 e listar todos os arquivos na partição.

# Monta a partição /dev/vda1
mount /dev/vda1 /media 
# Lista todos os arquivos na partição
ls media

Como você pode ver abaixo, todos os arquivos e diretórios de /dev/vda1 são transferidos com sucesso para /dev/sdb.

Verifying Data Integrity of the File Transfer

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.

mkdir -pv /root/nc-webserver-docroot/
Creating a Webserver Root Directory

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.

<!doctype html>

<html lang="en">

<head>
	<title>NETCAT Testing network connectivity </title>
</head>

<body>
	<h1>NETCAT Test</h1>
	<p>Connection Successful! Your networking skills are awesome!</p>
</body>

</html>

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.

#!/bin/bash
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat /root/nc-webserver-docroot/index.html)"

4. Agora, execute o comando chmod abaixo, que não tem saída, mas torna o arquivo httpresponse.sh executável (+x).

chmod +x /root/nc-webserver-docroot/httpresponse.sh

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.
ncat -lv 7777 -c /root/nc-webserver-docroot/httpresponse.sh --keep-open

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.

Starting the Ncat Server

6. Agora, abra outro terminal e execute o seguinte comando para testar seu servidor web Netcat (http://localhost:7777).

curl -vvv 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.

Testing your Ncat server

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!

Verifying the HTTP Request from the curl Client

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?

Source:
https://adamtheautomator.com/how-to-use-netcat/