Pesquisa de site

Como usar scripts Nmap Script Engine (NSE) no Linux


Nmap é um scanner e ferramenta de exploração de segurança de rede de linha de comando popular, poderoso e multiplataforma. Também pode ajudá-lo a obter uma visão geral dos sistemas que conectaram sua rede; você pode usá-lo para descobrir todos os endereços IP de hosts ativos, verificar portas abertas e serviços em execução nesses hosts e muito mais.

Um dos recursos interessantes do Nmap é o Nmap Script Engine (NSE), que traz ainda mais flexibilidade e eficiência a ele. Ele permite que você escreva seus próprios scripts na linguagem de programação Lua e, possivelmente, compartilhe esses scripts com outros usuários do Nmap.

Leia também: 29 exemplos práticos de comandos Nmap para Linux

Existem quatro tipos de scripts NSE, a saber:

  • Scripts de pré-regra – são scripts executados antes de qualquer operação de varredura do Nmap, eles são executados quando o Nmap ainda não reuniu nenhuma informação sobre um alvo.
  • Scripts de host – são scripts executados depois que o Nmap realizou operações normais, como descoberta de host, varredura de porta, detecção de versão e detecção de sistema operacional em um host de destino.
  • Scripts de serviço – são scripts executados em serviços específicos que escutam em um host de destino.
  • Postrule scripts – são scripts executados após o Nmap ter verificado todos os seus hosts alvo.

Em seguida, esses scripts são agrupados em várias categorias, incluindo aqueles para autenticação (auth), descoberta de hosts (broadcast), ataques de força bruta para adivinhar credenciais de autenticação (brute<), descobrir mais sobre uma rede (descoberta), causar uma negação de serviço (dos), explorar alguma vulnerabilidade (explorar) , etc. Vários scripts pertencem à categoria padrão.

Observação: Antes de prosseguirmos, você deve observar estes pontos-chave:

  • Não execute scripts de terceiros sem examiná-los criticamente ou apenas se você confiar nos autores. Isso ocorre porque esses scripts não são executados em uma sandbox e, portanto, podem danificar seu sistema de forma inesperada ou maliciosa ou invadir sua privacidade.
  • Em segundo lugar, muitos desses scripts podem possivelmente ser executados como um script prerule ou postrule. Considerando isso, recomenda-se a utilização de uma pré-regra para fins de consistência.
  • O Nmap usa o banco de dados scripts/script.db para descobrir os scripts e categorias padrão disponíveis.

Para ver a localização de todos os scripts NSE disponíveis, execute o utilitário de localização no terminal, assim:

locate *.nse

/usr/share/nmap/scripts/acarsd-info.nse
/usr/share/nmap/scripts/address-info.nse
/usr/share/nmap/scripts/afp-brute.nse
/usr/share/nmap/scripts/afp-ls.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/afp-serverinfo.nse
/usr/share/nmap/scripts/afp-showmount.nse
/usr/share/nmap/scripts/ajp-auth.nse
/usr/share/nmap/scripts/ajp-brute.nse
/usr/share/nmap/scripts/ajp-headers.nse
/usr/share/nmap/scripts/ajp-methods.nse
/usr/share/nmap/scripts/ajp-request.nse
/usr/share/nmap/scripts/allseeingeye-info.nse
/usr/share/nmap/scripts/amqp-info.nse
/usr/share/nmap/scripts/asn-query.nse
...

Os scripts NSE são carregados usando o sinalizador --script, que também permite executar seus próprios scripts, fornecendo categorias, nomes de arquivos de script ou o nome dos diretórios onde seus scripts estão localizados.

A sintaxe para habilitar scripts é a seguinte:

nmap -sC target     #load default scripts
OR
nmap --script filename|category|directory|expression,...   target    

Você pode ver uma descrição de um script com a opção --script-help. Além disso, você pode passar argumentos para alguns scripts através das opções --script-args e --script-args-file, a última é usada para fornecer um nome de arquivo em vez de um argumento de linha de comando.

Para realizar uma varredura com a maioria dos scripts padrão, use o sinalizador -sC ou, alternativamente, use --script=default conforme mostrado.

nmap -sC scanme.nmap.org
OR
nmap --script=default scanme.nmap.org
OR
nmap --script default scanme.nmap.org
Saída de amostra
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:36 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.0027s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-title: Go ahead and ScanMe!

Nmap done: 1 IP address (1 host up) scanned in 11.74 seconds

Para usar um script para o propósito apropriado, você pode, antes de tudo, obter uma breve descrição do que ele realmente faz, por exemplo, http-headers.

nmap --script-help http-headers scanme.nmap.org
Saída de amostra
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:37 IST

http-headers
Categories: discovery safe
https://nmap.org/nsedoc/scripts/http-headers.html
  Performs a HEAD request for the root folder ("/") of a web server and displays the HTTP headers returned.

Carregando scripts NSE para realizar varreduras Nmap

Você pode selecionar ou carregar scripts para realizar uma verificação em diferentes métodos explicados abaixo.

Usando o nome do script

Depois de saber o que um script faz, você pode realizar uma varredura usando-o. Você pode usar um script ou inserir uma lista de nomes de scripts separados por vírgula. O comando abaixo permitirá que você visualize os cabeçalhos HTTP configurados no servidor web no host de destino.

nmap --script http-headers scanme.nmap.org
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:39 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.27s latency).
Not shown: 996 closed ports
PORT      STATE    SERVICE
22/tcp    open     ssh
80/tcp    open     http
| http-headers: 
|   Date: Wed, 15 Nov 2017 05:10:04 GMT
|   Server: Apache/2.4.7 (Ubuntu)
|   Accept-Ranges: bytes
|   Vary: Accept-Encoding
|   Connection: close
|   Content-Type: text/html
|   
|_  (Request type: HEAD)
179/tcp   filtered bgp
31337/tcp open     Elite

Nmap done: 1 IP address (1 host up) scanned in 20.96 seconds

Usando categorias

Você também pode carregar scripts de uma categoria ou de uma lista de categorias separadas por vírgulas. Neste exemplo, estamos usando todos os scripts da categoria padrão e de transmissão para realizar uma varredura no host 192.168.56.1.

nmap --script default,broadcast 192.168.56.1

Usando * curinga

Isto é útil quando você deseja selecionar scripts com um determinado padrão de nome. Por exemplo, para carregar todos os scripts com nomes começando com ssh, execute o comando abaixo no terminal:

nmap --script "ssh-*" 192.168.56.1

Usando expressões booleanas

Você também pode selecionar scripts usando expressões booleanas que podem ser construídas usando os operadores and, or e not. E os nomes em uma expressão booleana podem ser uma categoria, um nome de arquivo de script.db ou todos.

O comando a seguir carregará scripts das categorias padrão ou de transmissão.

nmap --script "default or broadcast" 192.168.56.10

O que equivale a:

nmap --script default,broadcast 192.168.56.10

Para carregar todos os scripts omitindo aqueles da categoria vuln, execute este comando no terminal.

nmap --script "not vuln" 192.168.56.10

O próximo comando parece um pouco complicado mas é fácil de entender, ele seleciona scripts nas categorias padrão, ou broadcast, deixando de fora aqueles com nomes começando com ssh-:

nmap --script "(default or broadcast) and not ssh-*" 192.168.56.10

É importante ressaltar que é possível combinar categorias, nomes de scripts, um diretório contendo seus scripts personalizados ou uma expressão booleana para carregar scripts, como esta:

nmap --script broadcast,vuln,ssh-auth-methods,/path/to/custom/scripts 192.168.56.10

Passando argumentos para scripts NSE

Abaixo está um exemplo que mostra como passar argumentos para scripts com a opção –script-args:

nmap --script mysql-audit --script-args "mysql-audit.username='root', \
mysql-audit.password='password_here', mysql-audit.filename='nselib/data/mysql-cis.audit'"

Para passar um número de porta, use a opção -p nmap:

nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username='root', \ 
mysql-audit.password='password_here' , mysql-audit.filename='nselib/data/mysql-cis.audit'"

O comando acima executa uma auditoria da configuração de segurança do servidor de banco de dados MySQL em relação a partes do benchmark CIS MySQL v1.0.2. Você também pode criar seus próprios arquivos de auditoria personalizados úteis para outras auditorias do MySQL.

É isso por enquanto. Você pode encontrar mais informações na página de manual do Nmap ou verificar NSE Usage.

Para começar a escrever seus próprios scripts NSE, confira este guia: https://nmap.org/book/nse-tutorial.html

Conclusão

Nmap é uma ferramenta realmente poderosa e útil que todo administrador de sistema ou rede precisa em seu arsenal de segurança – o NSE simplesmente adiciona mais eficiência a ela.

Neste artigo, apresentamos o Nmap Script Engine e vimos como encontrar e usar os vários scripts disponíveis em diferentes categorias. Se você tiver alguma dúvida, não hesite em nos escrever através do formulário de comentários abaixo.