Utilizando o Nmap Scripting Engine (NSE)

O foco deste artigo é no Nmap Scripting Engine (NSE), uma funcionalidade poderosa e flexível do Nmap, que permite a execução de scripts a fim de automatizar tarefas variadas.

[ Hits: 39.598 ]

Por: Bruno Salgado em 12/12/2012 | Blog: http://www.seginfo.com.br


Scripts e sintaxe - Parâmetros



Dependências de scripts e sintaxe de uso do Nmap Scripting Engine

O NSE oferece também um esquema de dependências de scripts que é utilizando para estabelecer a ordem em que os scripts serão executados.

Este esquema é útil em situações em que um script pode se beneficiar em utilizar a saída de um outro script. Entretanto, apesar do que o nome sugere, caso a dependência de um script não seja executada, este script poderá ser executado mesmo assim.

Um exemplo claro do funcionamento deste esquema, são os scripts da categoria "brute". Muitos scripts têm como dependências scripts da categoria brute, pois, se alguma credencial for obtida por um script desta categoria, esta credencial certamente será útil para outros scripts.

Assim, ao relacioná-lo como dependência, fica garantido que o script de dependência será executado antes, e a sua saída será repassada, melhorando ainda mais os resultados obtidos na execução do segundo script.

Existem diversas maneiras distintas de executar o NSE. Duas delas "-sC" e "-A", executam somente os scripts da categoria padrão, que agora sabemos que chama-se "default".

A opção "-A" representa a varredura agressiva do Nmap e equivale às opções "-sC -sV -O --traceroute". Neste caso, o NSE também executa a categoria de scripts padrão e o Nmap ativa também a detecção de versões de serviços e a identificação de sistema operacional, que foram tratadas no primeiro artigo da série "Mapeamento de Redes com Nmap" [1], e também a opção que traça a rota de transmissão dos pacotes.

Além destas, o NSE também pode ser executado a partir da opção "--script", sendo esta a opção que pode ser configurada para executar scripts de outras categorias, além da padrão. Esta opção é usada obedecendo a seguinte sintaxe:

--script script|categoria|diretório|expressão|all[,script|categoria|diretório|expressão]


Se a opção "--script" for usada com a categoria "default", o NSE comporta-se da mesma maneira que com as opções "-sC" e "-A". Assim, os comandos abaixo são equivalentes e o NSE executa somente os scripts da categoria padrão:

nmap -A scanme.nmap.org
$ nmap -sC -sV -O --traceroute scanme.nmap.org
$ nmap --script "default" -sV -O --traceroute scanme.nmap.org


A opção "--script" pode ser usada com nomes de scripts completos, nomes de categorias, nomes de diretórios, expressões ou a string "all". O NSE busca por scripts identificados pela extensão ".nse", que atendam às condições passadas no subdiretório "scripts" dos seguintes diretórios: o parâmetro da opção "--datadir", o conteúdo das variáveis "$NMAPDIR" e "NMAPDATADIR", aquele que contém o binário do Nmap seguido de "../share/nmap", "~/.nmap" e o atual.

Quando o NSE é executado com nomes de scripts completos, seguido ou não da extensão ".nse", o NSE busca por script com o nome de arquivo passado e o executa se suas condições de execução forem satisfeitas.

Segue abaixo exemplos de varreduras que chamam um único script:

nmap --script "http-methods" scanme.nmap.org
$ nmap --script "dhcp-discovery,dns-zone-transfer,whois" scanme.nmap.org


Quando o NSE é executado com nomes de categorias, o NSE busca todos os scripts pertencentes àquela categoria e os executa se suas condições de execução forem satisfeitas.

Segue abaixo exemplos de varreduras que chamam categorias:

nmap --script "default" scanme.nmap.org
$ nmap --script "auth,discovery,safe" 10.0.0.0/24


Quando o NSE é executado com nomes de diretórios, o NSE busca todos os scripts armazenados no diretório referido e os executa se suas condições de execução forem satisfeitas.

Segue abaixo exemplos de varreduras que chamam scripts armazenados em um diretório:

nmap --script "./custom_scripts" 172.16.0.0/28
$ nmap --script "/tmp/scripts,/usr/share/nmap/scripts" 10.0.0.0/24


Quando o NSE é executado com a string "all", o NSE executa todos os scripts que encontrar se suas condições execução forem satisfeitas.

Segue abaixo um exemplo de varredura que chama todos os scripts:

nmap --script "all" 10.0.0.1

Quando o NSE é executado com uma expressão, o NSE busca todos os scripts referenciados pela expressão e os executa se suas condições execução forem satisfeitas. Expressões podem conter caracteres coringas (Wildcards) no estilo de Scripts Bash, parênteses que definem escopos e os operadores lógicos "and", "or" e "not":

nmap --script "http-* and ssh-* and not intrusive" scanme.nmap.org
$ nmap --script "intrusive and (brute or dos or exploit) and not (default or safe)" 178.16.0.1


Passando parâmetros para scripts

É possível passar argumentos para os scripts executados com o NSE através da opção "--script-args". Os argumentos são passados em uma lista separada por vírgulas no formato "chave=valor". A listagem de argumentos aceitos por cada script pode ser acessada diretamente na documentação de cada script no Portal NSEDoc de Referência do NSE [5].

Os argumentos pode afetar apenas um ou todos os scripts executados. Quando um argumento deve afetar apenas um script, este deve ser passado usando a sintaxe "nome_script.chave=valor" ou, para passar mais de um argumento "nome_script={ chave1=valor1,chave2=valor2}".

Quando o argumento deve afetar todos os scripts executados, basta passar "chave=valor" que todos os scripts que aceitam o argumento "chave" o utilizarão. Seguem abaixo exemplos de varredura utilizando o NSE com passagem de parâmetros:

nmap --script 'brute' --script-args 'user="foo",pass="bar"' 10.0.0.0/24
$ nmap --script 'safe' --script-args 'domain="alvo.com", smtp.domain= "alvomail.com"' 192.168.0.1
$ nmap --script 'brute' --script-args 'smtp-brute={userdb=user2.txt,passdb=pass2.txt}, userdb=user1.txt,passdb=pass1.txt' 172.16.0.1


Também é possível passar parâmetros em um arquivo texto através da opção "--script-args-file". Para utilizar esta opção, os parâmetros devem ser escritos da mesma forma que seriam na modalidade passada na linha de comando e estar separados por vírgulas ou quebras de linha.

Conclusão

O Nmap Scripting Engine é uma funcionalidade do Nmap que inclui à varredura tradicional do Nmap diversas funcionalidades que permitem interrogar hosts na rede de maneira mais flexível e versátil.

Este artigo discutiu as funcionalidades principais oferecidas pelo NSE, no entanto, ainda há muitas outras funcionalidades do Nmap que não foram se quer mencionadas, como:
  • Opções de controle de desempenho;
  • Opções de evasão de firewalls/IDS/IPS;
  • Opções de spoofing;
  • E muitas outras.

O leitor é encorajado a buscar mais informações na Documentação Oficial do Nmap e do NSE, no livro oficial e outras fontes, como os webinars NMAP -- Software Livre para Exploração de Rede e Auditorias de Segurança e Teste de Invasão com o Nmap Scripting Engine, da Clavis.

* Vale mencionar que, apesar de não haver legislação especifica que tipifique como crime o ato de executar varreduras de qualquer tipo em redes de qualquer espécie, o objetivo deste artigo não é incentivar aos leitores a fazer varreduras aleatórias em redes que não são de sua propriedade ou que não se tenha autorização para fazê-lo. E sim, informar quanto a que tipo de informação relevante pode ser extraída destas varreduras e como estas podem ajudar em auditorias teste de invasão, depuração de firewalls ou administração de servidores etc.

Veja o primeiro artigo desta série em:
Por: Henrique Soares e Rafael Ferreira
Página anterior    

Páginas do artigo
   1. Introdução
   2. Sobre o Nmap Scripting Engine
   3. Quickstart - Classificação dos scripts
   4. Scripts e sintaxe - Parâmetros
Outros artigos deste autor

Desafio: Análise Forense Computacional - Forense em Tráfego de Rede [Resolvido]

Auditorias Teste de Invasão para Proteção de Redes Corporativas

Trilhas de Certificação em Segurança da Informação - Qual caminho seguir?

Leitura recomendada

Configurando o OpenVPN no SuSE Linux Enterprise Server (SLES)

Acesso remoto de forma simples e segura

Snort + MySQL + Guardian - Instalação e configuração

Syslog-NG - Configurando um servidor de logs

KNOCK + SSH

  
Comentários
[1] Comentário enviado por brunosalgado em 12/12/2012 - 14:51h

Créditos do artigo todos para Henrique Soares e Rafael Ferreira. http://goo.gl/ayMMH =)



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts