Como usar o Netcat e melhorar suas habilidades de rede!

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

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

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

How to Use Netcat : Scanning for Open Ports

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.

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, conforme esperado.

Filtering the Successful Port Connection

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:

netcat options host port filename

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 ao netcat 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 (
netcat -l 4444 > ata_file

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.

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 < é usada para dizer ao netcat para pegar a entrada do arquivo especificado.

netcat 149.28.86.131 4444 < ata_file

4. Por último, 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ê pode ver a mensagem “Hello from ATA” abaixo, indicando que a transferência funcionou.

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ê 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.

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

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 geram saída, mas você verificará se a transferência funcionou na etapa seguinte.

# Cria um diretório apache_backup e alguns arquivos de texto dentro
mkdir apache_backup && cd apache_backup && touch ata{1..5}.txt
# Compacta 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 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.

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

2. No host de envio (ubuntu2), execute o comando abaixo fdisk para encontrar todos os discos e partições na 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) via porta 4444.

Comprimir 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. 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.

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 foram 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 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.

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 do Netcat irá servir.

<!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 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.

#!/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 uma 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 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.
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 ouvindo 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 o 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 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!

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 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?

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