Realizar um Escaneamento com Autenticação Básica no Nikto

Kali LinuxBeginner
Pratique Agora

Introdução

Nikto é um popular scanner de servidores web de código aberto que realiza testes abrangentes contra servidores web para vários itens, incluindo mais de 6700 arquivos/programas potencialmente perigosos, verifica versões desatualizadas de mais de 1250 servidores e problemas específicos de versão em mais de 270 servidores.

Muitas aplicações web possuem áreas restritas que só são acessíveis após o usuário fornecer credenciais válidas. A Autenticação Básica HTTP (HTTP Basic Authentication) é um dos métodos mais simples usados para proteger essas áreas. Para realizar uma avaliação de segurança completa, é crucial escanear essas seções autenticadas.

Neste laboratório, você aprenderá a usar o Nikto para realizar um escaneamento autenticado em um diretório web protegido por Autenticação Básica. Você usará a opção -id para fornecer as credenciais necessárias, permitindo que o Nikto acesse e teste os recursos protegidos em busca de vulnerabilidades.

Identificar um recurso web protegido por Autenticação Básica

Nesta etapa, você primeiro verificará se o recurso web de destino está realmente protegido por Autenticação Básica. Uma maneira comum de verificar isso é usando o comando curl para inspecionar os cabeçalhos HTTP retornados pelo servidor quando você tenta acessar o recurso.

Um recurso desprotegido retornará um status 200 OK, enquanto um protegido retornará um status 401 Unauthorized juntamente com um cabeçalho WWW-Authenticate, indicando o tipo de autenticação exigido.

Vamos tentar acessar o diretório protegido http://localhost/protected/ usando curl com a opção -I, que busca apenas os cabeçalhos HTTP.

Execute o seguinte comando no seu terminal:

curl -I http://localhost/protected/

Você deverá ver uma saída semelhante à seguinte. Observe o status HTTP/1.1 401 Unauthorized e o cabeçalho WWW-Authenticate: Basic realm="...". Isso confirma que o diretório está protegido.

HTTP/1.1 401 Unauthorized
Date: [current_date]
Server: Apache/2.4.52 (Ubuntu)
WWW-Authenticate: Basic realm="Restricted Content"
Content-Type: text/html; charset=iso-8859-1

Obter o nome de usuário e a senha necessários

Nesta etapa, reconheceremos as credenciais necessárias para acessar a área protegida. Em um teste de penetração do mundo real, você pode obtê-las por vários meios, como adivinhação de senhas, encontrando-as em repositórios de código públicos ou por meio de engenharia social.

Para este laboratório, o ambiente foi pré-configurado com um nome de usuário e senha específicos. Você precisará dessas credenciais para as etapas subsequentes para realizar um escaneamento autenticado.

As credenciais são:

  • Nome de usuário: labex
  • Senha: P@ssw0rd123

Não há comandos para executar nesta etapa. Simplesmente anote as credenciais acima e prossiga para a próxima etapa, onde você as usará para autenticar.

Usar a opção -id com o formato 'usuário:senha'

Nesta etapa, você aprenderá sobre a opção -id do Nikto, que é usada para fornecer credenciais para autenticação HTTP. O formato é uma única string contendo o nome de usuário e a senha, separados por dois pontos (:).

A sintaxe é: -id <nome_de_usuário>:<senha>

Antes de usar isso com o Nikto, é uma boa prática verificar se as credenciais funcionam. Você pode fazer isso novamente com curl, desta vez usando a opção --user para fornecer as credenciais.

Execute o seguinte comando para acessar a página protegida com as credenciais corretas:

curl --user labex:P@ssw0rd123 http://localhost/protected/

Se as credenciais estiverem corretas, o servidor concederá acesso e retornará o conteúdo da página, como mostrado abaixo. Isso confirma que você pode autenticar com sucesso.

This is a protected page accessible only with credentials.

Agora que você confirmou as credenciais e entende o formato, está pronto para usá-las em um escaneamento Nikto.

Executar o escaneamento autenticado na área protegida

Nesta etapa, você combinará seu conhecimento das etapas anteriores para executar um escaneamento autenticado completo com o Nikto. Você precisa especificar o host de destino e as credenciais de autenticação.

A estrutura do comando será:

  • nikto: O programa a ser executado.
  • -h http://localhost/protected/: A opção -h (host), apontando diretamente para o diretório que você deseja escanear.
  • -id labex:P@ssw0rd123: A opção -id com o nome de usuário e a senha.

Agora, execute o comando completo em seu terminal. O escaneamento pode levar alguns minutos para ser concluído.

nikto -h http://localhost/protected/ -id labex:P@ssw0rd123

O Nikto iniciará o escaneamento. Como você forneceu credenciais válidas, ele poderá acessar http://localhost/protected/ e testar vulnerabilidades dentro desse diretório. A saída será algo como isto:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         [scan_start_time]
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present.
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type.
+ /: Server may leak inodes via ETags, header found with file /, fields: 0x1ed 0x5f7e21e8a2e80
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD.
+ /: Apache/2.4.52 appears to be outdated (current is at least Apache/2.4.54).
+ 8142 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time:           [scan_end_time] (30 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Verificar se o Nikto acessou com sucesso os recursos protegidos

Nesta etapa, você analisará a saída do escaneamento para confirmar que o Nikto autenticou com sucesso e escaneou a área protegida. Um indicador chave de um escaneamento autenticado bem-sucedido é a ausência de erros de autenticação generalizados.

Uma boa prática para analisar os resultados do escaneamento é salvar a saída em um arquivo. Você pode fazer isso com a opção -o (output). Vamos executar o escaneamento novamente e salvar o relatório em um arquivo de texto chamado nikto_report.txt.

nikto -h http://localhost/protected/ -id labex:P@ssw0rd123 -o nikto_report.txt -Format txt

Após a conclusão do escaneamento, um arquivo chamado nikto_report.txt será criado em seu diretório atual (~/project). Você pode inspecionar este arquivo para verificar os resultados. Uma maneira rápida de verificar o sucesso é observar a linha de resumo para o número de erros.

Use o comando grep para procurar a linha que contém "error(s)" em seu arquivo de relatório:

grep "error(s)" nikto_report.txt

A saída deve mostrar 0 error(s), o que confirma que o Nikto não encontrou problemas como 401 Unauthorized ao fazer as requisições. Isso, combinado com a lista de descobertas, prova que o escaneamento autenticado foi bem-sucedido.

+ 8142 requests: 0 error(s) and 5 item(s) reported on remote host

Resumo

Parabéns por completar este laboratório! Você realizou com sucesso um escaneamento de vulnerabilidades web autenticado usando o Nikto.

Neste laboratório, você aprendeu a:

  • Identificar um recurso web protegido por Autenticação Básica HTTP usando curl.
  • Compreender o formato das credenciais necessárias para um escaneamento autenticado.
  • Usar a opção -id do Nikto para fornecer um nome de usuário e senha.
  • Executar um escaneamento contra um diretório protegido e verificar seu sucesso analisando a saída.

Dominar o escaneamento autenticado é uma habilidade crítica para qualquer profissional de segurança, pois permite uma avaliação muito mais profunda e abrangente da postura de segurança de uma aplicação web, descobrindo vulnerabilidades que estão ocultas atrás de uma parede de login.