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.
Uma de suas principais funcionalidades é a varredura de diretórios Common Gateway Interface (CGI). Scripts CGI podem ser uma fonte de vulnerabilidades significativas se não forem devidamente protegidos. Por padrão, o Nikto varre uma lista predefinida de diretórios CGI comuns. No entanto, para uma varredura mais eficiente e direcionada, é crucial saber como controlar esse comportamento.
Neste laboratório, você aprenderá a usar a opção -Cgidirs do Nikto para gerenciar a varredura de diretórios CGI, incluindo desativá-la, varrer todos os diretórios possíveis e especificar diretórios personalizados para testar.
Compreender o comportamento padrão de varredura de diretórios CGI do Nikto
Nesta etapa, você iniciará um servidor web simples e executará uma varredura Nikto padrão para observar seu comportamento padrão na localização de diretórios CGI.
Primeiro, vamos configurar um servidor web simples para escanear. Usaremos o módulo http.server integrado do Python para isso.
Navegue até o diretório webroot que preparamos para você.
cd ~/project/webroot
Agora, inicie o servidor web na porta 8000. O & no final do comando executará o servidor em segundo plano, permitindo que você continue usando o terminal.
python3 -m http.server 8000 &
Você deverá ver uma mensagem indicando que o servidor está em execução.
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
Com o servidor em execução, vamos realizar uma varredura Nikto básica contra ele. A opção -h é usada para especificar o host de destino.
nikto -h http://localhost:8000
Após a conclusão da varredura, revise a saída. O Nikto verifica muitas coisas, mas você deverá encontrar uma linha indicando que ele encontrou o diretório /cgi-bin/. Isso ocorre porque /cgi-bin/ é um dos diretórios comuns que o Nikto verifica por padrão.
- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 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)
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 7 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Nota: Em algumas versões ou configurações mais recentes do Nikto, a varredura padrão pode não relatar
/cgi-bin/a menos que um teste específico o acione. O ponto principal é entender que um conjunto padrão de caminhos está sendo verificado. Forçaremos essas verificações nas próximas etapas para ver resultados mais claros.
Usar -Cgidirs none para desativar toda a varredura de diretórios CGI
Nesta etapa, você aprenderá como desativar completamente a varredura de diretórios CGI. Isso é útil quando você deseja realizar uma varredura rápida focada em outras vulnerabilidades ou quando tem certeza de que o servidor de destino não usa scripts CGI.
A opção -Cgidirs controla a varredura de CGI. Ao definir seu valor como none, você instrui o Nikto a pular essa parte do teste inteiramente.
Execute o seguinte comando para escanear o servidor novamente, mas desta vez com a varredura de CGI desativada:
nikto -h http://localhost:8000 -Cgidirs none
Examine a saída. Você notará que ela é muito semelhante à varredura anterior, mas confirma explicitamente que os diretórios CGI não foram escaneados. A linha No CGI directories found ainda estará presente, mas desta vez é porque dissemos ao Nikto para não procurá-los. Isso torna a varredura um pouco mais rápida.
- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 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
+ CGI directory scanning has been disabled.
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 7 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Observe a linha + CGI directory scanning has been disabled. que confirma que nosso comando funcionou como esperado.
Usar -Cgidirs all para escanear todos os diretórios CGI configurados
Nesta etapa, você usará o valor all para a opção -Cgidirs. Isso força o Nikto a realizar a varredura CGI mais abrangente, verificando todos os diretórios listados em sua configuração interna. Isso é mais completo do que a varredura padrão.
Execute a varredura Nikto com a opção -Cgidirs all:
nikto -h http://localhost:8000 -Cgidirs all
Agora, inspecione a saída cuidadosamente. Desta vez, o Nikto relatará explicitamente o diretório /cgi-bin/ porque nosso servidor de teste o possui e o sinalizador all garante que ele seja verificado.
- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 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
+ OSVDB-3233: /cgi-bin/: Directory indexing found.
+ OSVDB-3092: /cgi-bin/: This might be interesting...
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 8 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Você pode ver duas novas descobertas relacionadas a /cgi-bin/, confirmando que a varredura forçada foi bem-sucedida.
Especificar um caminho de diretório CGI personalizado para escanear
Nesta etapa, você aprenderá como escanear diretórios CGI específicos e não padrão. Isso é extremamente útil quando você está avaliando uma aplicação web personalizada que coloca seus scripts em locais únicos.
Nossa configuração inclui um diretório chamado /cgi-custom/. Uma varredura Nikto padrão não encontraria isso. Podemos dizer ao Nikto para verificá-lo especificamente passando o caminho para a opção -Cgidirs.
Execute o seguinte comando para escanear apenas o diretório /cgi-custom/:
nikto -h http://localhost:8000 -Cgidirs /cgi-custom/
Revise a saída. O Nikto agora relatará que encontrou /cgi-custom/. Ele não relatará /cgi-bin/ porque limitamos a varredura apenas ao caminho que especificamos.
- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 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
+ OSVDB-3233: /cgi-custom/: Directory indexing found.
+ OSVDB-3092: /cgi-custom/: This might be interesting...
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 8 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Como você pode ver, a varredura identificou com sucesso o diretório personalizado, demonstrando como você pode adaptar a varredura CGI do Nikto às suas necessidades específicas.
Comparar resultados de diferentes estratégias de varredura CGI
Nesta etapa final, vamos revisar e comparar os resultados das diferentes estratégias de varredura que você utilizou. Isso ajudará a solidificar seu entendimento sobre como controlar a varredura CGI do Nikto.
Você realizou quatro tipos distintos de varreduras:
- Varredura Padrão (
nikto -h ...): Escaneou uma lista padrão de diretórios comuns. Em nosso caso, inicialmente não sinalizou/cgi-bin/, mas o diretório estava presente. Esta varredura fornece uma boa linha de base. - Sem Varredura CGI (
-Cgidirs none): Pulou completamente todas as verificações de diretórios CGI. A saída confirmou queCGI directory scanning has been disabled(a varredura de diretórios CGI foi desativada). Esta é a opção mais rápida se você não precisar verificar CGI. - Varredura de Todos os CGI (
-Cgidirs all): Forçou uma verificação de todos os diretórios CGI conhecidos pelo Nikto. Esta varredura encontrou e relatou com sucesso nosso diretório/cgi-bin/. Esta é a opção mais completa, mas também a mais lenta. - Varredura CGI Personalizada (
-Cgidirs /cgi-custom/): Escaneou apenas o diretório específico/cgi-custom/e o encontrou com sucesso, ignorando todos os outros como/cgi-bin/. Esta é a abordagem mais direcionada.
A escolha da estratégia correta depende do seu objetivo:
- Para uma visão geral rápida, a varredura padrão é frequentemente suficiente.
- Para ser absolutamente completo, use
all. - Para economizar tempo em um servidor conhecido por não ter CGI, use
none. - Para aplicações personalizadas, especificar caminhos personalizados é o método mais eficiente.
Finalmente, vamos limpar parando o servidor web Python. Como ele foi o primeiro e único job em segundo plano que você iniciou, você pode pará-lo com o comando kill %1.
kill %1
Você verá uma mensagem "Terminated" (Terminado), confirmando que o servidor foi desligado.
Resumo
Neste laboratório, você adquiriu experiência prática no controle da varredura de diretórios CGI no Nikto. Você aprendeu como iniciar um servidor web simples para fins de teste e, em seguida, aplicou diferentes estratégias de varredura usando a opção -Cgidirs.
Você realizou com sucesso:
- Uma varredura Nikto padrão.
- Desativou completamente a varredura CGI usando
-Cgidirs none. - Realizou uma varredura abrangente de todos os diretórios CGI conhecidos com
-Cgidirs all. - Direcionou um diretório específico e não padrão, fornecendo um caminho personalizado.
Ao dominar essas opções, você agora pode executar varreduras de vulnerabilidade de servidor web mais eficientes, direcionadas e eficazes com o Nikto, adaptando seus testes às características específicas do seu alvo.


