Usando o Nmap NSE (Nmap Scripting Engine) para coleta de informações

Como sabemos, a coleta de informações é um dos passos mais importantes para a realização de um PenTest.  O Nmap é uma ferramenta que pode executar várias atividades em um PenTest. O NSE (Nmap Scripting Engine) são  scripts que podem transformá-lo em uma ferramenta multi-uso. Oferece um framework robusto e flexível para desenvolver scripts para realizar tarefas com informações disponibilizadas pelo Nmap.

O assunto sobre  segurança para a web vem crescendo bastante e chamando a atenção, vários colaboradores tem desenvolvido scripts  para web, tornando o Nmap em uma ferramenta extremamente poderosa para escaneamento de  aplicações web.

Pode-se ver uma lista completa de scripts para web no site: http://nmap.org/nsedoc/. Eles são separados nas seguintes categorias abaixo.

auth: Esses scripts tratam com credenciais de autenticação (ou fazendo o bypass por elas) no sistema alvo. Por exemplo, acesso ao X11, FTP anônimo e enumerações de usuários em bancos Oracle.

broadcast: Scripts dessa categoria costumam fazer descoberta de hosts não listados por comandos enviandos por broadcasting  na rede local.

brute: Realiza ataque de força bruta para descobrir as credenciais de acesso de um servidor remoto.

default: Conjunto padrão de scripts e são executados quando se utiliza as opções -sC ou -A. Também pode ser chamada através da opção –script=default. Muitos fatores são considerados para decidir se um script deve ser inserido na categoria defautl, é muitas vezes subjetivo. Os principais critérios são:

  • Velocidade: Uma varredura padrão pode terminar muito rápido, o que exclui força bruta de autenticação, web spiders, e qualquer outro script que pode levar minutos ou horas para fazer a varredura em um simples serviço.
  • Utilidade:  Varreduras padrões  precisam produzir informações válidas e úteis. Deve ser útil em ocasiões quando você precisa de informações extra. Se o próprio autor do script não conseguir explicar sua utilidade, o script não deve entrar na categoria default.
  • Verbosidade: A saída do Nmap é utilizada para uma grande variedade de finalidades e deve ser concisa e legível. Um script que gera frequentemente páginas de saída não deve ser adicionada a categoria padrão. Quando não há nenhuma informação importante para relatar, o script NSE ( particularmente os default)  devem retornar nada, zero de saída. Checando por uma vulnerabilidade obscura pode retornar OK por padrão, contanto que apenas produza uma saída quando descobrir realmente a vulnerabilidade.
  • Confiança: Muitos scripts usam assinatura heurística e fuzzy (correspondência difusa) para chegar a conclusões sobre um host alvo ou serviço. Exemplos incluem detecção de sniffers e injeção de SQL. Se o script  for mal escrito, que não pertencem a categoria default onde pode confundir ou enganar usuários iniciantes. Usuários que especificam um script ou categoria diretamente são geralmente mais avançados e querem saber como o script funciona ou querem saber onde encontrar documentação.
  • Intrusividade: Alguns scripts são muito intrusivos por usar recursos significativos do sistema remoto, que podem travar o sistema ou serviço, ou podem ser suscetíveis de serem detectados como um ataque por um administrador. Scripts mais intrusivos,  são menos adequados para a categoria default. Scripts padrões  estão quase sempre também na categoria safe, embora ocasionalmente permita scripts da categoria intrusive quando eles  estão apenas sendo levemente intrusivos.
  • Privacidade: Alguns scripts divulgam , por sua própria natureza, informações de terceiros. Por exemplo o script whois deve exibir muitas informações de um dado endereço IP ou domínio. Quanto mais um script exibir informações privativas, menos adequado é ele estar na categoria padrão.

discovery: Scripts tentam descobrir ativamente mais informações sobre o alvo, fazendo consultas em  em registros públicos, dispositivos com SNMP habilitados, serviços de diretório (LDAP) e mais.

dos: Podem causar indisponibilidade do alvo, ao realizar um “crash” no serviço , como um efeito colateral quando testa uma vulnerabilidade no alvo.

exploit: Visam explorar ativamente uma vulnerabilidade conhecida;

external: Podem enviar informações para um banco de dados de terceiros ou outro recurso de rede. Por exemplo o whois, no qual faz conexão com servidores whois para obter informações sobre o endereço do alvo.

fuzzer: Esta categoria  contém scripts que são feitos para enviar programas inesperados ou dados aleatórios em pacotes visando descobrir bugs e vulnerabilidades;

intrusive: Estes scripts não podem ser  ser classificados na categoria safe, pois apresentam grande risco de provocar erros no alvo, usando  uma quantidade significativa de recursos (como CPU e banda de rede) e ser detectado por seus administradores como um ataque;

malware: Scripts dessa categoria  testam se o alvo remoto está infectado com um malware ou backdoor;

safe: Os scripts não são feitos para realizar um “crash” no sistema, nem usar grande banda de rede  ou outros recursos do alvo, ou ainda explorar falhas de segurança.

version: extendem a funcionalidade de detecção de versão do Nmap e não podem ser selecionados explicitamente. Ele é selecionado para rodar apenas se a opção -sV (detecção de versão) foi selecionada.

vuln: Checam por conhecida vulnerabilidade específica e geralmente apenas reporta os resultados encontrados.

Tipos de Scripts e Fases

O NSE suporta 4 tipos de scripts, no qual são diferenciados pelo tipo de meta que ele quer atingir e da fase do scanning no qual ele está sendo executado. Scripts individuais podem suportar vários tipos de operações. Eles podem ser úteis para as tarefas que não dependem de scan específicos, tais como a realização  de requisições de broadcast de rede para consultas DHCP e de servidores DNS. Alguns desses scripts podem gerar novos alvos para scan do Nmap (somente se especificar a opção newtargets). Por exemplo, se utilizarmos o script dns-zone-transfer , pode-se obter uma lista de IPs do domínio usando transferência de zonas e automaticamente adiciona-se esses IPs a lista de scan do Nmap. Script Prerule podem ser identificados pelo função prerule.

Prerule scripts

Esses scripts são executados antes de qualquer das fases de scan do Nmap, assim o Nmap não coletou nenhuma informação sobre o(s) alvo(s).

Host scripts

Scripts nessa fase rodam durante a operação normal do Nmap depois de realizar o host discovery, port scanning, detecção de versão e deteção de sistema operacional contra o alvo. Este tipo de script é invocado apenas uma vez contra cada host de destino que corresponda com a função.

Service scripts

Esses scripts são executados contra serviços específicos rodando no alvo.

Postrule scripts

Esses scripts rodam após o Nmap scanear todos os alvos. Eles podem ser úteis para a formatação e apresentação de saído do Nmap.

Utilização

No Kali Linux 2.0 a versão do Nmap mais atualizada é a 7.01 , e quando escrevi esse pequeno tutorial era a versão mais recente.

Obviamente pode-se baixar a versão mais atual no site e fazer sua instalação.

Para ver uma descrição rápida, sua categoria, a referência no site do Nmap e a localização de determinado script utilize o comando:

Captura de Tela 2016-01-05 às 18.22.19Nsse caso será sobre todos os scripts NSE que iniciam por “ip-geolocation-”.

Depois de baixar o script deve-se atualizar a base de dados dos scripts do Nmap com o seguinte comando:

Captura de Tela 2016-01-05 às 18.24.411- Determinando Origem do endereço IP de um alvo

Podemos determinar a origem do endereço IP de um determinado alvo, ou seja, sua localização física. Existem alguns scripts NSE para realizar essa tarefa, todos eles utilizando uma base de dados particular.  O exemplo abaixo utiliza o Geoplugin geolocation web service através do script ip-geolocation-geoplugin. Obviamente existem outros. Mas a idéia é a mesma.

# nmap –script ip-geolocation-geoplugin   baseti.com.br

Captura de Tela 2016-01-05 às 18.33.05

O script faz uma chamada externa  para determinar as coordenadas e localização do alvo. Ou ainda você pode utilizar todas as bases de dados disponíveis inserindo o comando:

# nmap –script ip-geolocation-*  baseti.com.br

2 – Realizando Whois com Nmap

O comando whois pode ser executado via linha de comando através de sistemas Linux e também em sites especializados. O Nmap tem um script que realiza essa mesma tarefa. Irá retornar informações sobre o registro, nome de contato, range de IP, país e etc.

# nmap –script whois-domain baseti.com.br

Pode-se utilizar o IP para verificar informações também, usando o script whois-ip. Ele traz informações mais resumidas e bem úteis.

# nmap –script whois-ip 200.0.35.178

3 – Encontrando contas de E-mail

No Kali Linux o script http-google-email não vem por padrão, por isso tem que instalar ele manualmente. Ele utiliza o Google Web e Google Groups para procurar emails de um host alvo. Siga  os passos descritos abaixo para fazer sua instalação

Primeiro entrar no diretório onde ficam os scripts do nmap e fazer o download:

# cd /usr/share/nmap/scripts/

# wget http://seclists.org/nmap-dev/2011/q3/att-401/http-google-email.nse

Depois de baixar o script deve-se atualizar a base de dados dos scripts do Nmap com o seguinte comando:

# nmap –script-updatedb

Se houver alguns erros não se preocupe. Iremos resolvê-lo agora. A parte boa é que ele exibe a linha ou o problema a ser corrigido.

Captura de Tela 2016-01-05 às 18.35.35

Inicialmente ele informa que não foi declarada a variável “shortport”. Vamos editar o script e já alterar também as variáveis “stdnse” e “http” que ele também reclama.

# vim /usr/share/nmap/scripts/http-google-email.nse

Encontre as variáveis e deixe da seguinte forma:

local shortport = require “shortport”
stdnse = require “stdnse”
http = require “http”

Fica logo abaixo de author = “Shinnok”, como na figura abaixo.

Captura de Tela 2016-01-05 às 18.37.55

Salve o arquivo e novamente atualize o Nmap:

Captura de Tela 2016-01-05 às 18.44.47

Se tudo deu certo já se pode usar o script.

# nmap -Pn -p80 --script http-google-email insecure.org

Melhor ainda utilizando também o http-email-harvest para melhorar a busca.

# nmap -Pn -p80 --script http-google-email,http-email-harvest baseti.com.br

4 – Brute Force em Registros DNS

Faz tentativas de enumerar nome de hosts de DNS por força bruta e descobrir subdomínos comuns. Sua utilização é bem simples.

# nmap -p80 –script dns-brute  unb.br

5 – Descobrindo domínios virtuais com hostmap-bkf

Tenta listar todos os hostnames que apontam para o mesmo endereço IP , consultando o banco de dados online em http://www.bfk.de/bfk_dnslogger.html.

# nmap --script hostmap-bfk insecure.org

Captura de Tela 2016-01-05 às 18.47.52

 6 – Análise de respostas HTTP com Nmap

Protocolos amplamente utilizados estão sempre a mercê de implementações de desenvolvedores, e o HTTP não é diferente. Solicitações especialmente criadas fazem o servidor web comporta-se de sua própria maneira e isso permite-nos alguns truques bacanas para realizar um fingerprint neles.

6.1 – Detectando o método HTTP TRACE

Para checar se um servidor web tem o método TRACE habilitado use o script http-trace

# nmap -p80 --script http-trace insegure.org

Captura de Tela 2016-01-05 às 18.50.02

Também utilizei um servidor da minha rede interna com IP 172.16.254.140 para verificar se esta utilizando o método trace.

6.2 – Listando contas de usuários com http-userdir-enum

Se o módulo mod_userdir do Apache estiver habilitado, pode-se listar nomes de usuários válidos utilizando o script http-userdir-enum.

# nmap -p80 --script http-userdir-enum tse.jus.br

Captura de Tela 2016-01-05 às 18.51.48

Olha que lindo o poder da força!!!

6.3 – Checando se um servidor web é protegido por um firewal de aplicação web – WAF/IPS

Para determinar se um servidor web está atrás de um firewall de aplicação web pode-se utilizar o script http-waf-detect. Lembrando  que este script apenas detecta produtos e configurações que alteram o tráfego HTTP. Exemplo:

# nmap -p80 --script http-waf-detect --script-args="http-waf-detect.uri=/testphp.vulnweb.com/artists.php,http-waf-detect.detectBodyChanges" www.modsecurity.org

Captura de Tela 2016-01-05 às 18.57.19

Descoberta de Aplicação 

Quando se está realizando um pentest do tipo black box, enfrentamos o desafio de encontrar todas as aplicações rodando no servidor web. Existem scripts NSE do Nmap que podem ajudar nessa tarefa.

6.4 – Enumerando aplicações web comuns

Para enumerar diretórios comuns em aplicações web e muitos outros arquivos interessantes. Irei executar o script em um servidor Windows 2008 R2 com o XAMP instalado. Fazemos:

# nmap --script http-enum -p80 172.16.254.188

O script irá detectar uma grande quantidade de aplicações populares ou comuns, que podem ter vulnerabilidades. Ele realmente inclui arquivos  dos 2 últimos anos usando a base do exploit-db.com.

Captura de Tela 2016-01-05 às 19.01.10

6.5 – Pegando robots.txt

Existem muitos robôs de sites de busca, que também chama-mos de crawler, que nada mais são que aplicativos que navegam pela internet através dos links encontrados nas páginas , em busca de conteúdo a ser indexado e exibido nos resultados de busca.

Você pode optar por não ter algumas de suas páginas exibidas nos resultados de busca. O arquivo robots.txt funciona com um filtro para os robôs dos sites de busca e faz com que os webmasters controlem permissões de acesso a determinadas páginas ou sites.

O robots.txt controla qual informação  de um site deve ou não ser indexada pelos sites de busca.

Usando o script http-robots.txt será exibido o seu conteúdo e quais diretórios ou arquivos o site não quer exibir para os buscadores.

# nmap -p80 --script http-robots.txt baseti.com.br

Captura de Tela 2016-01-05 às 19.03.15

Bem , estes foram alguns exemplos de como trabalhar com NSE, em breve estaremos colocando mais artigos sobre o nmap.

Que a força esteja com você \(‘-‘)/

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s