Adicionar Cabeçalhos Personalizados a Scans 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.

Às vezes, uma aplicação web requer um cabeçalho HTTP específico nas requisições. Isso pode ser para autenticação (como uma chave de API ou um token de sessão), para roteamento para uma versão específica de uma aplicação, ou para habilitar um modo de depuração. Scans Nikto padrão falhariam ou seriam incompletos nesses cenários porque não teriam o cabeçalho necessário.

Neste laboratório, você aprenderá a usar a opção -addheaders do Nikto para incluir cabeçalhos personalizados em seus scans. Isso permite testar aplicações que possuem requisitos de cabeçalho específicos, garantindo uma avaliação de segurança mais completa e precisa.

Identificar um cabeçalho HTTP personalizado exigido por uma aplicação

Nesta etapa, você interagirá com uma aplicação web simples para entender por que um cabeçalho personalizado pode ser necessário. Temos um servidor web rodando na porta 8000 que exige um cabeçalho específico, X-LabEx-Auth, para acesso.

Primeiro, vamos tentar acessar a aplicação web sem o cabeçalho personalizado usando o comando curl.

curl http://127.0.0.1:8000

Você receberá uma mensagem de "Access Denied" (Acesso Negado), pois o cabeçalho necessário está ausente.

Access Denied

Agora, vamos enviar a requisição novamente, mas desta vez incluiremos o cabeçalho personalizado necessário usando a opção -H no curl. O cabeçalho é X-LabEx-Auth com o valor SecretToken.

curl -H "X-LabEx-Auth: SecretToken" http://127.0.0.1:8000

Desta vez, o servidor concede acesso e retorna uma mensagem de boas-vindas. Isso confirma que a aplicação verifica este cabeçalho específico.

Welcome, authorized user! The server is Apache/2.4.1 (Unix).

Este processo demonstra como identificar e confirmar a necessidade de um cabeçalho personalizado antes de executar um scan de segurança.

Usar a opção -addheaders para especificar o cabeçalho e o valor

Nesta etapa, você aprenderá sobre a opção do Nikto usada para adicionar cabeçalhos personalizados aos seus scans.

Agora que sabemos que um cabeçalho personalizado é necessário, precisamos dizer ao Nikto para incluí-lo em todas as suas requisições HTTP. O Nikto fornece a opção -addheaders para este propósito.

A sintaxe é direta:

-addheaders "NomeDoCabecalho:ValorDoCabecalho"

Você substitui NomeDoCabecalho pelo nome do cabeçalho (por exemplo, X-LabEx-Auth) e ValorDoCabecalho pelo seu valor correspondente (por exemplo, SecretToken).

Se você precisar adicionar vários cabeçalhos personalizados, pode separá-los com um caractere de nova linha (\n). Por exemplo:

-addheaders "Cabecalho1:Valor1\nCabecalho2:Valor2"

Para o nosso cenário atual, a estrutura completa do comando Nikto para escanear a aplicação alvo seria assim. Note que não estamos executando o comando nesta etapa; estamos apenas construindo-o para entender a sintaxe.

nikto -h http://127.0.0.1:8000 -addheaders "X-LabEx-Auth: SecretToken"

Este comando instrui o Nikto a ter como alvo o host em http://127.0.0.1:8000 e a adicionar o cabeçalho X-LabEx-Auth: SecretToken a cada requisição que ele enviar durante o scan.

Executar um scan com o cabeçalho personalizado incluído

Nesta etapa, você executará um scan Nikto usando a opção -addheaders que você acabou de aprender.

Com o comando correto construído, é hora de executar o scan. Isso permitirá que o Nikto interaja com a aplicação como um usuário autenticado, potencialmente descobrindo vulnerabilidades que não são visíveis para usuários não autenticados.

Execute o seguinte comando no seu terminal:

nikto -h http://127.0.0.1:8000 -addheaders "X-LabEx-Auth: SecretToken"

O Nikto iniciará o scan. Como cada requisição inclui o cabeçalho X-LabEx-Auth: SecretToken, a aplicação web as processará com sucesso. Observe a saída do Nikto. Ele identificará o servidor e começará a testar várias vulnerabilidades.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Werkzeug/2.0.1 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ 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
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ "Allowed HTTP Methods: HEAD, OPTIONS, GET"
+ OSVDB-3233: /: Found a default page.
...
+ 15 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time:           ...
---------------------------------------------------------------------------
+ 1 host(s) tested

O ponto principal é que o scan é executado com sucesso, enquanto um scan sem o cabeçalho seria bloqueado pela aplicação.

Verificar se o cabeçalho está sendo enviado usando uma ferramenta de proxy

Nesta etapa, você verificará se o Nikto está realmente enviando o cabeçalho personalizado com suas requisições. Embora ferramentas profissionais como Burp Suite ou OWASP ZAP sejam tipicamente usadas para isso, podemos simular um proxy com um simples listener netcat (nc).

Primeiro, você precisa abrir um segundo terminal. Você pode fazer isso clicando no ícone "+" na barra de abas do painel do terminal.

Na nova aba do terminal, inicie um listener netcat em uma porta, por exemplo, 8888. Este listener simplesmente imprimirá quaisquer dados que receber.

nc -l -p 8888

Agora, volte para a sua aba do terminal original. Execute o scan Nikto novamente, mas desta vez, aponte-o para o seu listener netcat em vez do servidor web real. Isso fará com que o Nikto envie sua requisição HTTP para o netcat, permitindo-nos inspecioná-la.

nikto -h http://127.0.0.1:8888 -addheaders "X-LabEx-Auth: SecretToken"

Após executar o comando, volte rapidamente para a segunda aba do terminal onde o netcat está em execução. Você verá a requisição HTTP bruta enviada pelo Nikto. Procure pelo cabeçalho X-LabEx-Auth: SecretToken na saída.

GET / HTTP/1.1
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.00 (Nikto/2.5.0) (Evasions:None) (Test:000001)
X-LabEx-Auth: SecretToken
Accept-Encoding: gzip,deflate
Connection: close

Como você pode ver, o cabeçalho personalizado está incluído na requisição. Isso confirma que a opção -addheaders está funcionando como esperado.

Você pode agora parar o listener netcat pressionando Ctrl+C na segunda aba do terminal e, em seguida, fechar a aba.

Testar vulnerabilidades que exigem cabeçalhos específicos

Nesta etapa, você entenderá a implicação prática de segurança do uso de cabeçalhos personalizados, comparando scans com e sem o cabeçalho.

Muitas vulnerabilidades, como referências diretas inseguras a objetos (IDOR) ou falhas de escalonamento de privilégios, existem apenas em seções autenticadas de uma aplicação. Um scan que não fornece o cabeçalho de autenticação correto não detectará essas questões.

Para ilustrar isso, primeiro, execute um scan Nikto contra o servidor web sem o cabeçalho personalizado. Isso simula um scan por um atacante não autenticado.

nikto -h http://127.0.0.1:8000

O Nikto será executado, mas cada requisição que ele enviar receberá uma resposta "Access Denied" (Acesso Negado). O scanner não consegue analisar a aplicação corretamente porque não consegue passar pela verificação inicial de autorização. Os resultados de tal scan têm valor limitado.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Werkzeug/2.0.1 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ 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
+ "Allowed HTTP Methods: GET, HEAD, OPTIONS"
+ OSVDB-3233: /: The site returned a 403 Forbidden, this may indicate that it's a default file.
...

Ao comparar isso com o scan bem-sucedido que você executou na Etapa 3 (que usou o cabeçalho), você pode ver a diferença. O scan com o cabeçalho personalizado conseguiu interagir com a lógica principal da aplicação (como indicado pela mensagem "Welcome" que vimos com curl) e realizar testes significativos. O scan sem o cabeçalho foi parado na porta de entrada.

Isso destaca a importância de usar cabeçalhos personalizados para garantir que seus scans de vulnerabilidade sejam o mais abrangentes possível.

Resumo

Neste laboratório, você aprendeu uma técnica crucial para realizar avaliações eficazes de segurança de aplicações web com o Nikto.

Você com sucesso:

  • Identificou a necessidade de um cabeçalho HTTP personalizado em uma aplicação usando curl.
  • Aprendeu a sintaxe da opção -addheaders do Nikto.
  • Realizou um scan Nikto que incluiu um cabeçalho personalizado para obter acesso autorizado.
  • Verificou que o cabeçalho personalizado estava sendo enviado corretamente usando um listener netcat.
  • Compreendeu como escanear com cabeçalhos personalizados pode descobrir vulnerabilidades que, de outra forma, seriam perdidas.

Esta habilidade é essencial para qualquer profissional de segurança, pois permite testes mais completos de aplicações web modernas e complexas que dependem de cabeçalhos para autenticação, gerenciamento de estado e outras funções.