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-idcom 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
-iddo 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.


