Como Usar o Nikto: Tutorial do Scanner Web (2026)

Penetration Testing
16 min de leitura
Como Usar o Nikto: Tutorial do Scanner Web (2026)
Nesta página
  1. O que é o Nikto?
  2. Instalando o Nikto e conferindo a versão
  3. Seu primeiro scan com o Nikto
  4. Lendo a saída do Nikto sem se enganar
  5. As flags que mudam o scan
    1. Encurtando o scan com -Tuning
    2. Apontando para a coisa certa
    3. Salvando os resultados
    4. Quando todo caminho volta como achado
  6. Onde o Nikto entra em um reconhecimento real
  7. Quando o Nikto é a ferramenta errada
  8. Considerações legais e éticas
  9. Perguntas frequentes
  10. Seus próximos passos

A porta 80 está aberta. Você tem uma aba do navegador mostrando uma página de login, nenhuma credencial e nenhuma ideia do que roda por trás. Aprender a usar o Nikto é aprender a transformar essa página em branco em uma lista de coisas que valem a pena investigar, mais ou menos no tempo que leva para ler o código-fonte da página inicial.

O Nikto é um scanner de servidor web. Ele dispara milhares de requisições contra caminhos sabidamente problemáticos, lê as respostas e diz quais delas voltaram interessantes. É uma das ferramentas mais antigas da fase de reconhecimento em teste de invasão, e continua sendo a primeira coisa que muita gente roda contra uma porta web. Abra o lab Backup Hunter em outra aba enquanto lê: é um servidor web com um arquivo esquecido nele, exatamente o tipo de coisa que o Nikto existe para encontrar.

Resumo: o Nikto é um scanner de servidor web open source escrito em Perl que testa um alvo contra uma base de mais de 8.000 arquivos e caminhos conhecidos como arriscados. Instale com sudo apt install nikto (o Kali traz a 2.6.1) e rode nikto -h http://alvo. Um scan padrão envia cerca de 8.000 requisições e termina em segundos contra uma máquina de lab. A habilidade não é rodar a ferramenta, é ler a saída: metade do que o Nikto reporta são cabeçalhos de segurança ausentes, e as verificações de versão geram falsos positivos o tempo todo.

O que é o Nikto?

O Nikto é um scanner open source que testa um servidor web contra uma base de arquivos perigosos conhecidos, versões desatualizadas de software e configurações incorretas comuns. Ele requisita cada caminho da sua base, compara a resposta com um conjunto de regras de correspondência e imprime as que parecem um achado.

Chris Sullo o mantém desde 2001. É escrito em Perl, construído sobre a biblioteca HTTP LibWhisker e licenciado sob GPLv3, embora as bases de verificações tenham licença própria e não possam ser reaproveitadas em outras ferramentas. A página oficial do projeto no cirt.net coloca a cobertura em "mais de 8.000 arquivos e programas potencialmente perigosos ou interessantes", além de versões desatualizadas de milhares de servidores e componentes. Se você clonar o repositório e contar, o arquivo principal db_tests na 2.6.1 tem 7.288 linhas, com o resto da cobertura espalhado por uma dúzia de outros arquivos de base.

Aqui está o que ninguém conta no primeiro dia, e isso explica a maior parte da decepção que as pessoas têm com a ferramenta.

O Nikto não faz crawling. Ele nunca lê um link no seu alvo para segui-lo. Ele tem uma lista de caminhos que já conhece, e pede todos eles. Esse é um trabalho fundamentalmente diferente do de um scanner de aplicação web, que mapeia a aplicação primeiro e ataca depois o que encontrou.

Então o Nikto é excelente para achar as coisas que todo mundo deixa jogadas por aí: /.env, /phpinfo.php, /backup/, um console administrativo em um caminho padrão, um banner de servidor que entrega a stack. Ele é inútil para achar a checagem de autorização quebrada em /api/v2/orders/1041, porque nada na base dele jamais ouviu falar dessa URL.

Instalando o Nikto e conferindo a versão

No Kali ele já vem instalado, e o pacote atual do Kali é a 2.6.1. No Debian ou Ubuntu é um comando só:

sudo apt update
sudo apt install nikto

Confira o que você realmente instalou antes de qualquer outra coisa:

nikto -Version
Nikto 2.6.1 (LW 2.5)

Esse "LW 2.5" é a versão do LibWhisker por baixo. A 2.6.1 saiu em 31 de julho de 2024 e vale a pena ter: adicionou conexões TLS keep-alive para scans cerca de 18% mais rápidos, passou a usar um user agent Chrome estático por padrão em vez de trocar a cada requisição, e adicionou o formato de saída sqld, que grava os achados direto em um banco MySQL ou PostgreSQL.

Se a sua distribuição empacota algo mais antigo, rode a partir da árvore de código:

git clone https://github.com/sullo/nikto
cd nikto/program
perl nikto.pl -Version

Na prática, esse clone falha em uma máquina limpa com ERROR: Required module not found: XML::Writer e nada mais. O Nikto verifica as dependências Perl antes de imprimir qualquer coisa, então um módulo faltando parece uma ferramenta quebrada. Instale e o mesmo comando funciona:

sudo apt install libxml-writer-perl

Também existe um contêiner oficial, caso você prefira não encostar em Perl:

docker pull ghcr.io/sullo/nikto:latest

Seu primeiro scan com o Nikto

Uma flag faz o trabalho. -h aceita um hostname, um IP ou uma URL completa:

nikto -h http://127.0.0.1:8000/

Aqui está um scan real contra um servidor web Python propositalmente descuidado, cortado apenas onde o mesmo achado se repete:

- Nikto v2.6.1
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ Target Port:        8000
+ Start Time:         2026-09-08 07:20:21 (GMT0)
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.11.15
+ No CGI Directories found (use '-C all' to force check all possible dirs).
+ [013587] /: Suggested security header missing: content-security-policy.
+ [013587] /: Suggested security header missing: strict-transport-security.
+ [013587] /: Suggested security header missing: x-content-type-options.
+ [600720] SimpleHTTP/0.6 appears to be outdated (current is at least 1.2).
+ [600652] Python/3.11.15 appears to be outdated (current is at least 3.14.6).
+ [001578] /backup/: This might be interesting.
+ [007226] /.env: .env file found. The .env file may contain credentials.
+ 8143 requests: 4 errors and 11 items reported on the remote host
+ End Time:           2026-09-08 07:20:50 (GMT0) (11 seconds)

Oito mil requisições em onze segundos, porque o alvo está em localhost. Contra um host real pela internet, o mesmo scan leva vários minutos.

Os números entre colchetes são os identificadores de teste do próprio Nikto, um por linha na base de verificações. Eles substituíram as referências OSVDB que tutoriais antigos ainda mostram, porque o OSVDB fechou em 2016. Servem para uma coisa: procurar na base o que exatamente uma verificação testou.

Duas linhas dessa saída são achados. O resto é contexto.

💻
Pratique agora: Backup Hunter - um servidor web com um arquivo de configuração que alguém copiou e esqueceu. As verificações "This might be interesting" do Nikto foram feitas exatamente para isso, e o lab roda no navegador sem nenhuma instalação.

Lendo a saída do Nikto sem se enganar

O Nikto reporta tudo que deu correspondência e deixa o julgamento com você. Esse é o design correto, e significa que a saída acima contém um achado real, uma pista e uma pilha de ruído.

O achado real é /.env. Um arquivo de ambiente legível publicamente costuma guardar credenciais de banco, chaves de API e o secret do framework. Essa única linha vale mais do que todo o resto do scan somado, e é a primeira coisa que você abre.

A pista é /backup/. "This might be interesting" é o jeito do Nikto dizer que existe um diretório que as pessoas costumam deixar aberto. Não é uma vulnerabilidade. É um lugar para apontar sua próxima ferramenta.

O ruído é o bloco de cabeçalhos de segurança. Cinco linhas dizendo que um servidor de testes em Python não tem Content-Security-Policy. Em um relatório de cliente, isso vai para a seção de severidade baixa. Em um capture the flag, vai para o lixo.

Sobram as verificações de versão, e é aí que iniciantes se queimam:

+ [600720] SimpleHTTP/0.6 appears to be outdated (current is at least 1.2).

Isso está errado. O SimpleHTTP é o servidor da biblioteca padrão do Python e não existe versão 1.2 dele. O Nikto casou o banner com uma entrada do db_outdated de um produto sem relação e de nome parecido, e reportou com total confiança. A linha do Python 3.11 acima é tecnicamente verdadeira e ainda assim não diz nada sobre a máquina ser explorável.

Todo achado de versão que o Nikto reporta é uma comparação de string com um banner que o servidor escolheu enviar. Servidores mentem sobre banners. Reverse proxies os reescrevem. Correções de segurança com backport deixam o número de versão intacto de propósito, e é por isso que um Apache do Debian totalmente atualizado anuncia uma versão que parece ter anos. Confirme o software e a versão você mesmo antes de anotar, e nunca parta direto para um exploit apoiado em uma correspondência de banner do Nikto.

Uma ordem de triagem que funciona: credenciais e arquivos de configuração primeiro, depois diretórios que vale a pena enumerar, depois identificação de software, depois cabeçalhos.

As flags que mudam o scan

O Nikto tem cerca de cinquenta opções. Estas são as que mudam o que acontece, e não apenas a aparência do resultado.

Encurtando o scan com -Tuning

-Tuning seleciona quais categorias de verificação rodam. Os códigos são de um caractere e você os concatena:

  • 1 arquivos interessantes, 2 configuração incorreta e arquivos padrão, 3 divulgação de informação
  • 4 injeção (XSS, script, HTML), 9 injeção SQL, 0 upload de arquivos
  • 5 e 7 recuperação de arquivos remotos, dentro da raiz web e em todo o servidor
  • 6 negação de serviço, 8 execução de comandos, a bypass de autenticação
  • b identificação de software, c inclusão de código remoto, d web services, e consoles administrativos
  • x inverte a seleção, então -Tuning x6 roda tudo menos as verificações de negação de serviço

A combinação só de reconhecimento é a que vale memorizar:

nikto -h http://alvo -Tuning 123b

Arquivos, configurações incorretas, divulgação de informação e identificação de software. No mesmo alvo de antes, isso derrubou o scan de 8.143 para 4.297 requisições e encontrou os mesmos onze itens. Metade do tráfego, nenhuma perda, porque as categorias de injeção e negação de serviço nunca iam disparar em um servidor de arquivos estáticos.

Sempre corte a categoria 6 em qualquer coisa que você não tenha construído. Essas verificações procuram condições de negação de serviço disparando-as.

Apontando para a coisa certa

  • -p 80,443,8080,8443 escaneia várias portas em uma execução. O Nikto lida sozinho com a troca entre HTTP e HTTPS.
  • -root /app/ prefixa um caminho a todas as requisições. Essencial quando a aplicação vive em um subdiretório e um scan de / não retorna nada.
  • -vhost dev.acme.example define o cabeçalho Host enquanto conecta no IP que você passou. Hospedagem compartilhada e ingresses do Kubernetes servem sites diferentes por hostname, então escanear o IP sem isso costuma testar o site errado.
  • -C all força as verificações de diretórios CGI que o scan padrão pula. Vale uma execução em qualquer coisa antiga.
  • -maxtime 5m limita a duração. Útil quando um alvo lento deixaria o scan rodando a tarde inteira.
  • -useproxy http://127.0.0.1:8080 roteia tudo por um proxy, o que coloca o scan inteiro no histórico do Burp Suite, onde você pode repetir requisições individuais.

Salvando os resultados

nikto -h http://alvo -o scan.json -Format json
nikto -h http://alvo -o relatorio.html -Format htm

O JSON entrega um array vulnerabilities com id, url, method, msg e references por achado, que é o que você quer se algo mais adiante vai processar isso. O relatório HTML é o que se anexa a um chamado. Formatos podem ser combinados com vírgulas, e se você omitir -Format, o Nikto deduz pela extensão do arquivo.

Quando todo caminho volta como achado

Alguns servidores respondem 200 OK para URLs que não existem, o que faz cada verificação da base parecer um achado. O Nikto tenta detectar isso requisitando caminhos aleatórios na inicialização, e quando falha você diz a ele como é uma falha:

nikto -h http://alvo -404string "Page not found"
nikto -h http://alvo -404code 302

Se um scan retorna centenas de achados em uma aplicação de página única moderna, é quase sempre por isso.

Onde o Nikto entra em um reconhecimento real

O Nikto é uma etapa, não uma metodologia. A ordem que funciona em uma máquina de CTF e em um trabalho para cliente é a mesma:

  1. Scan de portas primeiro. Você não pode escanear um servidor web que ainda não encontrou. Um scan de serviços com Nmap diz quais portas estão falando HTTP. O Nikto lê a saída greppable do Nmap, então um scan salvo com -oG portas.gnmap pode ser passado direto para -h e cada porta web aberta entra na fila: + Nmap Input Queued: 127.0.0.1:8000. A saída XML não funciona, só a greppable.
  2. Olhe o site você mesmo. Trinta segundos no navegador e no código-fonte batem qualquer scanner. Frameworks se anunciam em comentários, caminhos de scripts e nomes de cookies.
  3. Rode o Nikto em segundo plano. Inicie nikto -h http://alvo -Tuning 123b -o nikto.txt em um painel e continue lendo em outro. Deixar rodando não custa nada.
  4. Force o que o Nikto não tem como saber. O Nikto só pede caminhos que estão na base dele. Diretórios personalizados exigem uma wordlist, e é para isso que servem o Gobuster e o ffuf. As duas ferramentas se sobrepõem bem menos do que as pessoas imaginam: uma pergunta sobre arquivos sabidamente arriscados, a outra adivinha nomes.
  5. Leve as pistas para um proxy. Todo achado que valha a pena perseguir é aberto no Burp e testado à mão.

O erro a evitar é tratar um scan limpo do Nikto como um alvo limpo. Em uma aplicação moderna, um scan sem nenhum achado é o resultado normal. Significa que ninguém deixou um painel administrativo antigo jogado, não que a aplicação é segura.

Quando o Nikto é a ferramenta errada

Os limites honestos, para você parar de recorrer a ele em situações onde não vai ajudar:

  • Aplicações web modernas. Sem crawling, sem tratamento de sessão, sem JavaScript. Uma aplicação de página única movida a API é praticamente invisível para ele. Use um proxy e sua própria leitura do tráfego.
  • Qualquer coisa atrás de um WAF ou CDN. Milhares de requisições por /phpinfo.php e afins é o comportamento clássico de scanner. Cloudflare e concorrentes bloqueiam ou desafiam o scan, e todo achado depois desse ponto perde o sentido.
  • Áreas autenticadas. -id user:pass resolve HTTP Basic e NTLM, e nada mais. Não existe suporte a login por formulário, então tudo depois da página de login fica fora de alcance.
  • Lógica de negócio e controle de acesso. Autorização quebrada é o primeiro item do OWASP Top 10, e nenhum scanner baseado em caminhos vai encontrar isso um dia. É trabalho manual.
  • Confirmar uma vulnerabilidade. O Nikto diz que algo parece errado. Provar isso, e provar o impacto, é com você.

Uma flag merece uma nota porque os tutoriais a distorcem. -evasion aplica truques de codificação de requisição como autorreferências de diretório e troca de caixa na URL. O uso honesto dela é do lado defensivo: rode o mesmo scan com e sem, e veja se o seu próprio monitoramento continua detectando. Como forma de passar um scan pelos controles de outra pessoa, é tecnologia de vinte anos atrás, e as defesas atuais lidam com ela sem esforço.

Onde o Nikto ainda ganha o seu lugar é em infraestrutura antiga e interna, e em máquinas de CTF feitas para serem enumeradas. A aplicação de intranet que ninguém reimplantou desde 2018, a interface web da impressora, o servidor de homologação com listagem de diretórios ligada: é aí que alguns milhares de requisições automatizadas acham algo no primeiro minuto e economizam uma hora do seu dia.

Considerações legais e éticas

Lembrete essencial: sempre obtenha autorização explícita por escrito antes de testar qualquer sistema. O Nikto envia milhares de requisições por arquivos associados a ataques, tudo isso nos logs de acesso do alvo sob o seu endereço IP. Rodá-lo contra um host que você não possui ou não tem permissão para testar é acesso não autorizado sob o Computer Fraud and Abuse Act nos EUA, o Computer Misuse Act no Reino Unido, o artigo 154-A do Código Penal brasileiro (invasão de dispositivo informático) e leis equivalentes em quase todo lugar.

  • Escaneie apenas hosts nomeados em um documento de escopo assinado, ou ambientes de lab que você mesmo montou
  • Exclua a categoria de tuning 6 a menos que testes de negação de serviço estejam explicitamente no escopo e por escrito
  • Hospedagem compartilhada significa que um IP pode servir centenas de sites. Confirme o alvo com -vhost em vez de escanear um endereço torcendo para dar certo
  • Credenciais achadas em um arquivo de configuração exposto vão para o relatório, não para um formulário de login, a menos que o escopo diga o contrário
  • Avise o cliente antes de começar. Um scanner nos logs parece idêntico a um ataque, e times de defesa já abriram incidentes por bem menos

Plataformas de CTF e alvos propositalmente vulneráveis existem para você rodar tudo isso sem nada disso pesando sobre a cabeça. Use-as.

Perguntas frequentes

Para que serve o Nikto?

Para escanear um servidor web em busca de arquivos perigosos conhecidos, software desatualizado e configurações incorretas comuns. Ele requisita milhares de caminhos da própria base e reporta quais responderam de forma interessante. Testadores de invasão o usam cedo no reconhecimento, e jogadores de CTF assim que encontram uma porta web aberta.

O Nikto ainda vale a pena em 2026?

Sim, para o que ele faz bem. A versão 2.6.1 é mantida ativamente e encontra arquivos de configuração expostos, backups esquecidos e consoles administrativos padrão mais rápido do que qualquer processo manual. Ele não vai ajudar contra uma aplicação JavaScript moderna atrás de um CDN, e nunca foi projetado para isso.

O Nikto encontra injeção SQL e XSS?

Só da forma mais grosseira. As categorias de tuning 9 e 4 testam um punhado de caminhos sabidamente vulneráveis de produtos específicos, e não os parâmetros da aplicação do seu alvo. Para teste de injeção de verdade você precisa de um proxy e de trabalho manual ou de uma ferramenta dedicada como o sqlmap.

Por que o Nikto diz que meu servidor está desatualizado se ele está corrigido?

Porque ele compara a string do banner com uma base de versões, e nada além disso. Distribuições fazem backport de correções sem mudar o número da versão, reverse proxies reescrevem banners, e nomes de produtos parecidos geram absurdos como reportar o SimpleHTTP/0.6 do Python como desatualizado. Verifique a versão na mão antes de agir sobre ela.

Como deixar um scan do Nikto mais rápido?

Corte as verificações, não os timeouts. -Tuning 123b mantém arquivos, configurações incorretas, divulgação de informação e identificação de software, e reduz o número de requisições pela metade. Adicione -maxtime 5m para limitar a duração, e -p apenas com as portas que você sabe que estão abertas.

Nikto, Nmap ou Gobuster: qual eu preciso?

Os três, nessa ordem. O Nmap descobre quais portas estão abertas e o que está escutando. O Nikto pergunta a um servidor web sobre caminhos conhecidos como arriscados. Gobuster e ffuf adivinham caminhos que nenhuma base poderia conhecer, usando uma wordlist. Eles respondem perguntas diferentes e nenhum substitui os outros.

Seus próximos passos

Saber usar o Nikto é, em grande parte, saber o que ignorar. nikto -h http://alvo te dá um scan, -Tuning 123b te dá um mais rápido e mais discreto, -vhost e -root garantem que você está escaneando o site que pretendia, e -o relatorio.html -Format htm te dá algo para entregar. Todo o resto é triagem: arquivos de configuração primeiro, diretórios depois, banners tratados como boato.

O que a leitura não te dá é a sensação de um achado real aparecendo na saída. Rode o lab Backup Hunter e veja um arquivo esquecido virar credenciais, depois trabalhe o capítulo de scan de vulnerabilidades do nosso curso de teste de invasão em redes para ver como a saída de um scanner vira um achado que você consegue defender. Deixe o cheat sheet do Nikto aberto ao lado do terminal para as flags que você ainda não memorizou. Tudo roda no navegador no plano gratuito da HackerDNA, sem cartão de crédito e sem instalação local.

HackerDNA Team

Equipe HackerDNA

Escrito pela equipe HackerDNA - profissionais de cibersegurança que criam labs práticos de hacking e conteúdo educativo para ajudar você a desenvolver habilidades reais em segurança.

Conhecer a Equipe

Pronto para colocar isso em prática?

Pare de ler, comece a hackear. Ganhe experiência prática com mais de 170 labs de cibersegurança reais.

Comece a Hackear Grátis
25.000+ Hackers 100+ Labs & Cursos Grátis
Comece Grátis