O Netcat é uma ferramenta usada para ler e escrever dados em conexões de rede usando o protocolo TCP/IP. Dada sua grande versatilidade, o Netcat é considerado pelos hackers o canivete suíço do TCP/IP, podendo ser usado para fazer desde portscans até brute force.
O nome netcat vem do comando "cat" do Linux. O cat concatena arquivos e envia para a saída padrão (stdout). O netcat faz praticamente o mesmo, porém ao invés de concatenar arquivos, o netcat concatena sockets TCP e UDP.
Como o Netcat funciona
A princípio o Netcat foi lançado para ser um telnet aprimorado. Até então a única utilidade que ele teria seria se conectar a um host.
Porém, como o netcat pega os dados da entrada padrão (stdin) e envia pra outra ponta da conexão, que as escreve na saída padrão (stdout), é possível utilizar ele em conjunto com o shell pra fazer inúmeras coisas.
Por exemplo: na imagem do início do post, o que está sendo feito é um "telnet reverso", no qual, na máquina onde os comandos serão executados, cria-se um servidor com nc ouvindo na porta 1234 e tudo o que chegar no netcat é enviado para o bash, que processa o que chegar e envia para outro servidor netcat ouvindo na porta 5678. Qual a utilidade disso? Aparentemente nenhuma, pois o telnet e o ssh cumprem muito melhor essa função.
Mas o Netcat tem suas utilidades sim, e alguma serão citadas abaixo:
Escaneando portas com o Netcat
Será feita uma tentativa de conexão à um IP ou host e será estipulada as portas da tentativa de conexão:
$ nc -vv localhost -z 1-3000
Aqui serão escaneadas desde a porta 1 até a 10000.
Bruteforce com Netcat
O brute-force é o método de tentativa de obtenção de senhas utilizado quando um cliente se conecta a um host e tenta se logar, utilizando uma sequência de senhas que estão em um arquivo. Ou seja, se eu pegar o Netcat eu posso me CONECTAR ao host e com uma linha de comando, posso completar o comando com a comparação para obtenção das senhas.
$ nc -vv 79 < ~/wordlist.txt > nc_log.log
Perceba, que conectaremos a porta do FINGER(79) e redirecionaremos o conteúdo do arquivo wordlists.txt para essa porta. Quando algum resultado for válido ele será salvo em nc_log.log para que você possa analizar posteriormente.
Sniffer com Netcat
O Netcat pode capturar todo o tráfego de uma rede.
Iremos nos conectar a uma porta e mandar o netcat "dar eco" nela, ou seja, exibir TUDO o que passa por ela. Após isso, é só redirecionar tudo o que o Netcat gravou para um arquivo. Veja a sintaxe, para melhor compreensão:
$ nc -vv localhost 80 > ~/sniffer.log
Transferência de arquivos com Netcat
A vantagem de transferir arquivos usando o Netcat em relação à outros métodos é a velocidade. No entanto, desde que você queira somente transferir um único arquivo, ou uns poucos, o Netcat pode ser uma excelente solução para isso:
Primeiro vamos montar nosso servidor, que ficará esperando uma conexão e direcionaremos sua saída para um arquivo, que chamaremos de arquivo.zip
nc -l 1234 > arquivo.zip
Em seguida, vamos abrir uma conexão com nosso servidor, e direcionaremos um arquivo, por exemplo original.zip, para a entrada padrão desse cliente, da seguinte forma:
nc localhost 1234 < original.zip
Chat simples usando o Netcat
Para isso crie um servidor do netcat e abra uma conexão cliente para essa porta. O que você digitar de um lado, aparecerá do outro.
nc -l 1234
nc localhost 1234
Fazendo Spoof em servidores HTTP
Você pode usar o Netcat para se conectar a um servidor web usando cabeçalhos totalmente personalizados. Você pode adicionar quaisquer USER-AGENT, referer, ou qualquer outra informação de cabeçalho HTTP.
$ nc google.com 80Aqui o exemplo do cabeçalho (não em sua totalidade):
GET / HTTP/1.1
Host: google.com
User-Agent: Vindex
Referrer: http://tocadoelfo.blogspot.com
HTTP/1.0 200 OK
Content-Type: text/html; charset=UTF-8
Last-Modified: Fri, 02 Jul 2010 21:02:58 GMT
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Expires: Fri, 02 Jul 2010 22:07:19 GMT
Date: Fri, 02 Jul 2010 22:07:19 GMT
Cache-Control: public, max-age=0, proxy-revalidate, must-revalidate
ETag: "73202059-b4d7-4150-bdb0-e42c3bbe0c0b"
Server: GSE
X-Cache: HIT from gw.ifto.edu.br
Via: 1.0 gw.ifto.edu.br (squid/3.0.STABLE16)
Proxy-Connection: close
Clonar partições via rede com o Netcat
Somenta faça isso se realmente souber o que esta fazendo e o que isso significa.
Primeiro, crie um servidor com o Netcat e redirecione a saída dele para o comando dd:
$ nc -l 1234 | dd of=/dev/sda
Em seguida, rode o dd, que vai fazer uma varredura no disco e enviar tudo para a entrada padrão (stdin) do netcat, que se conectará ao servidor previamente configurado:
$ dd if=/dev/sdb | nc localhost 1234
É claro, você precisará estar com os discos desmontados para que o comando funcione. Ha sugestão é usar um LiveCD nas máquina. Nesse nosso caso foi conectado à mesma máquina, mas nada impede que essa conexão se dê via rede ou mesmo via internet.
Criando um servidor web simples com o netcat
Essa técnica é interessante e mostra um pouco mais da interação do shell com o netcat:
$ while true; do nc -l 80 -q 1 < pagina.html; done
Esse comando roda o netcat infinitamente e a cada vez que ele roda, o arquivo pagina.html é enviado para o cliente, no nosso caso o browser, que você pode acessar com o endereço http://localhost
Fonte: Viva o Linux