Utilize o Nmap Scripting Engine

NmapBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a utilizar o Nmap Scripting Engine (NSE). O laboratório cobre a execução de scripts padrão, o uso de scripts específicos, a adição de argumentos aos scripts, a atualização de scripts, o teste de múltiplos scripts e a visualização da saída do script no terminal Xfce. Você executará comandos como nmap -sC, nmap --script e nmap --script-updatedb contra endereços IP alvo para realizar várias varreduras e coletar informações.

Executar scripts padrão com nmap -sC 192.168.1.1

Nesta etapa, exploraremos como usar o Nmap para executar seu conjunto padrão de scripts contra um alvo. Os scripts do Nmap são ferramentas poderosas que podem automatizar uma ampla gama de tarefas, desde a identificação de vulnerabilidades até a coleta de informações sobre um sistema alvo. A opção -sC informa ao Nmap para usar a categoria de script "padrão". Esta categoria inclui scripts que são considerados seguros e úteis para varredura de uso geral.

Antes de começarmos, vamos garantir que estamos no diretório correto.

cd ~/project

Agora, vamos executar o Nmap com a opção -sC contra o endereço IP alvo 192.168.1.1. Este endereço IP é um espaço reservado. Em um cenário do mundo real, você o substituiria pelo endereço IP real do alvo que deseja varrer. Para este ambiente de laboratório, assumiremos que 192.168.1.1 é um alvo válido.

sudo nmap -sC 192.168.1.1

Este comando executará uma varredura Nmap padrão, incluindo uma varredura de portas e detecção de serviços, e então executará os scripts padrão contra quaisquer portas abertas. A saída mostrará os resultados da varredura de portas, detecção de serviços e qualquer informação coletada pelos scripts.

A saída terá uma aparência semelhante a esta (a saída exata variará dependendo do sistema alvo):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu)
| ssh-hostkey:
|   2048 ... (RSA)
| ssh-rsa ...
|_ssh-algorithm: ...
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -1s, deviation: 0s, median: -1s
|_nbstat: NetBIOS name: ..., NetBIOS user: ..., NetBIOS MAC: ... (unknown)
| smb-os-discovery:
|   OS: Unix
|   ...
|_  System time: ...

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

Neste exemplo, a saída mostra que a porta 22 está aberta e executando SSH. O script ssh-hostkey identificou a chave do host SSH, e o script ssh-algorithm identificou os algoritmos suportados. O script clock-skew detectou uma ligeira diferença de tempo no sistema alvo. Os scripts nbstat e smb-os-discovery coletaram informações sobre os serviços NetBIOS e SMB, respectivamente.

Nesta etapa, aprenderemos como usar um script Nmap específico. O Nmap possui uma grande biblioteca de scripts que podem ser usados para realizar várias tarefas. Usaremos o script banner, que tenta recuperar o banner de um serviço em execução em um host alvo. Banners geralmente contêm informações sobre a versão do software e outros detalhes que podem ser úteis para reconhecimento.

Primeiro, certifique-se de estar no diretório ~/project:

cd ~/project

Agora, vamos usar o comando nmap com a opção --script para especificar o script banner e direcionar o endereço IP do localhost, 127.0.0.1.

sudo nmap --script banner 127.0.0.1

Este comando informa ao Nmap para executar o script banner contra todas as portas abertas em 127.0.0.1. A saída mostrará os resultados do script, incluindo quaisquer banners que foram recuperados.

A saída pode ser semelhante a esta (a saída exata dependerá dos serviços em execução no seu localhost):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000028s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
631/tcp  open  ipp
5900/tcp open  vnc
8000/tcp open  http
8080/tcp open  http

Host script results:
|_banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_banner: 111/tcp:  rpcbind version 2-4
|_banner: 631/tcp: CUPS v2.4.1
|_banner: 5900/tcp: RFB 003.008
|_banner: 8000/tcp: Werkzeug/2.0.1 Python/3.9.7
|_banner: 8080/tcp: Jetty(9.4.44.v20210927)

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

Neste exemplo, o script banner recuperou com sucesso banners de vários serviços em execução em 127.0.0.1, incluindo SSH, rpcbind, CUPS, VNC e servidores HTTP. Os banners fornecem informações sobre as versões de software que estão sendo usadas.

Adicionar argumentos com nmap --script http-title --script-args http.useragent=Test 192.168.1.1

Nesta etapa, aprenderemos como passar argumentos para scripts Nmap. Alguns scripts exigem ou permitem que argumentos sejam personalizados. Usaremos o script http-title e modificaremos seu argumento http.useragent. O script http-title recupera o título de um servidor HTTP. O argumento http.useragent especifica a string User-Agent que o script usará ao fazer solicitações HTTP.

Primeiro, vamos navegar para o nosso diretório de trabalho:

cd ~/project

Agora, vamos executar o Nmap com a opção --script para especificar o script http-title e a opção --script-args para definir o argumento http.useragent como Test. Usaremos o endereço IP alvo 192.168.1.1. Lembre-se que, em um cenário real, você o substituiria pelo endereço IP real de um alvo executando um servidor HTTP.

sudo nmap --script http-title --script-args http.useragent=Test 192.168.1.1

Este comando informa ao Nmap para executar o script http-title contra quaisquer portas HTTP abertas em 192.168.1.1, usando "Test" como a string User-Agent.

A saída pode ser semelhante a esta (a saída exata dependerá do sistema alvo e da sua configuração do servidor HTTP):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.18.0
|_http-title: Test

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

Neste exemplo, o script http-title recuperou com sucesso o título do servidor HTTP em execução na porta 80 de 192.168.1.1. O argumento http.useragent foi usado para definir a string User-Agent como "Test" na solicitação HTTP. O servidor pode registrar esta string User-Agent, o que pode ser útil para identificar varreduras. Se o alvo não tiver a porta 80 aberta, você verá uma saída diferente.

Atualizar scripts com nmap --script-updatedb

Nesta etapa, atualizaremos o banco de dados de scripts do Nmap. O Nmap Scripting Engine (NSE) depende de um banco de dados de scripts. Com o tempo, novos scripts são adicionados e os scripts existentes são atualizados. Para garantir que você tenha os scripts mais recentes, você deve atualizar periodicamente o banco de dados de scripts.

Primeiro, certifique-se de estar no diretório ~/project:

cd ~/project

Agora, vamos usar o comando nmap com a opção --script-updatedb para atualizar o banco de dados de scripts.

sudo nmap --script-updatedb

Este comando fará o download das informações mais recentes do script e atualizará o banco de dados. A saída mostrará o progresso da atualização.

A saída pode ser semelhante a esta:

Starting Nmap 7.80 ( https://nmap.org ) at ...
NSE: Updating rule database.
NSE: Using nmap.org/svn/nse_svn to download the latest scripts.
Downloaded nmap-mac-prefixes.lua
Downloaded nselib/data/nmap-services.
Downloaded nselib/data/service-ports.
Downloaded scripts/script.db
NSE: Script database updated.
Nmap done: 0 IP addresses (0 hosts up) scanned in ... seconds

Esta saída indica que o banco de dados de scripts foi atualizado com sucesso. Agora você tem os scripts Nmap mais recentes disponíveis para uso.

Testar múltiplos scripts com nmap --script banner,http-title 127.0.0.1

Nesta etapa, executaremos múltiplos scripts Nmap simultaneamente. Isso permite que você colete mais informações sobre um alvo em uma única varredura. Usaremos os scripts banner e http-title contra o alvo 127.0.0.1.

Primeiro, vamos navegar para o nosso diretório de trabalho:

cd ~/project

Agora, vamos executar o Nmap com a opção --script, especificando os scripts banner e http-title, separados por vírgula. Usaremos o endereço IP alvo 127.0.0.1, que se refere à máquina local.

sudo nmap --script banner,http-title 127.0.0.1

Este comando informa ao Nmap para executar os scripts banner e http-title contra quaisquer portas abertas em 127.0.0.1. O script banner tenta recuperar banners de serviço, enquanto o script http-title recupera o título de quaisquer servidores HTTP.

A saída pode ser semelhante a esta (a saída exata dependerá dos serviços em execução em 127.0.0.1):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000018s latency).
Loopback interface ignored
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu)
| banner: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1
|_ssh-hostkey:
80/tcp open  http    nginx 1.18.0
|_http-title: Welcome to nginx!

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

Neste exemplo, o script banner recuperou o banner SSH da porta 22, e o script http-title recuperou o título do servidor HTTP em execução na porta 80. Se o alvo não tiver essas portas abertas, você verá uma saída diferente.

Visualizar a saída do script no terminal Xfce

Nesta etapa, focaremos na visualização da saída dos scripts Nmap dentro do terminal Xfce. O terminal Xfce é o emulador de terminal padrão no ambiente da VM LabEx. Você já o utilizou nas etapas anteriores. Esta etapa é mais sobre entender como interpretar a saída e menos sobre executar um novo comando.

A saída dos scripts Nmap é exibida diretamente no terminal após a conclusão da varredura. O formato da saída depende do próprio script. Alguns scripts fornecem uma saída de texto simples, enquanto outros podem fornecer dados mais estruturados.

Vamos revisitar o comando da etapa anterior:

sudo nmap --script banner,http-title 127.0.0.1

Quando você executa este comando, a saída é impressa diretamente no terminal Xfce. Você pode rolar pela saída do terminal para revisar os resultados dos scripts banner e http-title.

Por exemplo, a saída pode incluir:

  • Informações do banner: O script banner tenta recuperar banners de serviço de portas abertas. Isso pode revelar a versão do software em execução em uma porta específica.
  • Título HTTP: O script http-title recupera o título da página da web servida por um servidor HTTP.

A chave é examinar cuidadosamente a saída em busca de qualquer informação útil. O terminal Xfce fornece uma maneira simples e direta de visualizar essa informação. Você também pode usar ferramentas Linux padrão como grep para filtrar a saída, se necessário. Por exemplo, para encontrar apenas as linhas contendo "http-title", você pode canalizar a saída do comando nmap para grep:

sudo nmap --script banner,http-title 127.0.0.1 | grep "http-title"

Este comando executará a mesma varredura Nmap de antes, mas exibirá apenas as linhas na saída que contêm a string "http-title". Isso pode ser útil para focar em partes específicas da saída.

Esta etapa é principalmente sobre observação e compreensão. Não há um único comando a ser executado, mas sim um foco em como interpretar os resultados que você já gerou nas etapas anteriores dentro do ambiente do terminal Xfce.

Resumo

Neste laboratório, os participantes aprenderam a utilizar o Nmap Scripting Engine através de vários comandos. Eles começaram executando scripts padrão usando nmap -sC contra um IP alvo, o que inclui scripts seguros e úteis para varredura geral. Eles também aprenderam a usar um script específico com nmap --script, adicionar argumentos aos scripts com --script-args, atualizar scripts com --script-updatedb e testar múltiplos scripts de uma vez. Finalmente, eles visualizaram a saída do script no terminal Xfce.