Pesquisa de site

Nikto - Uma vulnerabilidade de aplicativo da Web e scanner CGI para servidores da Web


Nikto Web Scanner é outra ferramenta útil para o arsenal de qualquer administrador Linux. É um scanner web de código aberto lançado sob a licença GPL, que é usado para realizar testes abrangentes em servidores Web para vários itens, incluindo mais de 6.500 arquivos/CGIs potencialmente perigosos. .

Leitura sugerida: WPSeku – Um scanner de vulnerabilidade para encontrar problemas de segurança no WordPress

Ele foi escrito por Chris Solo e David Lodge para avaliação de vulnerabilidade, verifica versões desatualizadas em 1250 servidores Web e mais de 270 problemas específicos de versões. Ele também verifica e gera relatórios em busca de softwares e plug-ins de servidores web desatualizados.

Recursos do Nikto Web Scanner

  1. Suporta SSL
  2. Suporta proxy HTTP completo
  3. Suporta texto, HTML, XML e CSV para salvar relatórios.
  4. Procure por múltiplas portas
  5. Pode verificar em vários servidores obtendo entradas de arquivos como saída nmap
  6. Suporta IDs do LibWhisker
  7. Capaz o suficiente para identificar software instalado com cabeçalhos, arquivos e favicons
  8. Registros para Metasploits
  9. Relatórios para cabeçalhos “incomuns”.
  10. Enumeração de usuários Apache e cgiwrap
  11. Autenticar hosts com Basic e NTLM
  12. As verificações podem ser pausadas automaticamente em um horário especificado.

Requisitos do Nikto

Um sistema com instalação básica de Perl, Módulos Perl e OpenSSL deve permitir a execução do Nikto. Ele foi exaustivamente testado em Windows, Mac OSX e em diversas distribuições Unix/Linux, como Red Hat, Debian, Ubuntu, BackTrack, etc.

Instalação do Nikto Web Scanner no Linux

A maioria dos sistemas Linux atuais vem com pacotes Perl, Módulos Perl e OpenSSL pré-instalados. Se não estiverem incluídos, você pode instalá-los usando o utilitário gerenciador de pacotes do sistema padrão chamado yum ou apt-get.

No Red Hat/CentOS/Fedora
[root@tecmint ]# yum install perl perl-Net-SSLeay openssl
No Debian/Ubuntu/Linux Mint
[root@tecmint ]# apt-get install perl openssl libnet-ssleay-perl

Em seguida, clone os arquivos de origem Nikto estáveis mais recentes de seu repositório Github, vá para o diretório Nikto/programs/ e execute-o usando perl:

git clone https://github.com/sullo/nikto.git
cd nikto/programs
perl nikto.pl -h 
Saída de amostra
Option host requires an argument

       -config+            Use this config file
       -Display+           Turn on/off display outputs
       -dbcheck            check database and other key files for syntax errors
       -Format+            save file (-o) format
       -Help               Extended help information
       -host+              target host
       -id+                Host authentication to use, format is id:pass or id:pass:realm
       -list-plugins       List all available plugins
       -output+            Write output to this file
       -nossl              Disables using SSL
       -no404              Disables 404 checks
       -Plugins+           List of plugins to run (default: ALL)
       -port+              Port to use (default 80)
       -root+              Prepend root value to all requests, format is /directory
       -ssl                Force ssl mode on port
       -Tuning+            Scan tuning
       -timeout+           Timeout for requests (default 10 seconds)
       -update             Update databases and plugins from CIRT.net
       -Version            Print plugin and database versions
       -vhost+             Virtual host (for Host header)
   		+ requires a value

	Note: This is the short help output. Use -H for full help text.

A opção “O host requer um argumento” indica claramente que não incluímos os parâmetros necessários ao fazer um teste. Portanto, precisamos adicionar um parâmetro básico necessário para fazer um teste.

Teste Básico

A verificação básica requer um host que você deseja atingir. Por padrão, ela verifica a porta 80 se nada for especificado. O host pode ser um nome de host ou um endereço IP de um sistema. Você pode especificar um host usando a opção “-h”.

Por exemplo, quero fazer uma varredura em um IP 172.16.27.56 na porta TCP 80.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56
Saída de amostra
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          172.16.27.56
+ Target Hostname:    example.com
+ Target Port:        80
+ Start Time:         2014-01-10 00:48:12 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ Retrieved x-powered-by header: PHP/5.3.3
+ The anti-clickjacking X-Frame-Options header is not present.
+ Server leaks inodes via ETags, header found with file /robots.txt, inode: 5956160, size: 24, mtime: 0x4d4865a054e32
+ File/dir '/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ "robots.txt" contains 1 entry which should be manually viewed.
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
+ Multiple index files found: index.php, index.htm, index.html
+ DEBUG HTTP verb may show server debugging information. See http://msdn.microsoft.com/en-us/library/e8z01xdh%28VS.80%29.aspx for details.
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3233: /phpinfo.php: Contains PHP configuration information
+ OSVDB-12184: /index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-3092: /test.html: This might be interesting...
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ /connect.php?path=http://cirt.net/rfiinc.txt?: Potential PHP MySQL database connection string found.
+ OSVDB-3092: /test.php: This might be interesting...
+ 6544 items checked: 0 error(s) and 16 item(s) reported on remote host
+ End Time:           2014-01-10 00:48:23 (GMT5.5) (11 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Se você deseja digitalizar em um número de porta diferente, adicione a opção “-p” [-port]. Por exemplo, quero fazer uma varredura no IP 172.16.27.56 na porta TCP 443.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 443
Saída de amostra
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          172.16.27.56
+ Target Hostname:    example.com
+ Target Port:        443
---------------------------------------------------------------------------
+ SSL Info:        Subject: /O=*.mid-day.com/OU=Domain Control Validated/CN=*.mid-day.com
                   Ciphers: DHE-RSA-AES256-GCM-SHA384
                   Issuer:  /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldtech.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435
+ Start Time:         2014-01-10 01:08:26 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ Server leaks inodes via ETags, header found with file /, inode: 2817021, size: 5, mtime: 0x4d5123482b2e9
+ The anti-clickjacking X-Frame-Options header is not present.
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
+ Server is using a wildcard certificate: '*.mid-day.com'
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ 6544 items checked: 0 error(s) and 8 item(s) reported on remote host
+ End Time:           2014-01-10 01:11:20 (GMT5.5) (174 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Você também pode especificar hosts, portas e protocolos usando uma sintaxe de URL completa, e isso será verificado.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h http://172.16.27.56:80

Você também pode digitalizar qualquer site. Por exemplo, aqui fiz uma varredura em google.com.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h http://www.google.com
Saída de amostra
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          173.194.38.177
+ Target Hostname:    www.google.com
+ Target Port:        80
+ Start Time:         2014-01-10 01:13:36 (GMT5.5)
---------------------------------------------------------------------------
+ Server: gws
+ Cookie PREF created without the httponly flag
+ Cookie NID created without the httponly flag
+ Uncommon header 'x-frame-options' found, with contents: SAMEORIGIN
+ Uncommon header 'x-xss-protection' found, with contents: 1; mode=block
+ Uncommon header 'alternate-protocol' found, with contents: 80:quic
+ Root page / redirects to: http://www.google.co.in/?gws_rd=cr&ei=xIrOUomsCoXBrAee34DwCQ
+ Server banner has changed from 'gws' to 'sffe' which may suggest a WAF, load balancer or proxy is in place
+ Uncommon header 'x-content-type-options' found, with contents: nosniff
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ File/dir '/groups/' in robots.txt returned a non-forbidden or redirect HTTP code (302)
….

O comando acima realizará várias solicitações http (ou seja, mais de 2.000 testes) no servidor web.

Teste de múltiplas portas

Você também pode realizar varredura de múltiplas portas na mesma sessão. Para verificar várias portas no mesmo host, adicione a opção “-p” [-port] e especifique a lista de portas. As portas podem ser definidas como um intervalo (ou seja, 80-443) ou separadas por vírgula (ou seja, 80.443). Por exemplo, quero verificar as portas 80 e 443 no host 172.16.27.56.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 80,443
Saída de amostra
- Nikto v2.1.5
---------------------------------------------------------------------------
+ No web server found on cmsstage.mid-day.com:88
---------------------------------------------------------------------------
+ Target IP:          172.16.27.56
+ Target Hostname:    example.com
+ Target Port:        80
+ Start Time:         2014-01-10 20:38:26 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ Retrieved x-powered-by header: PHP/5.3.3
+ The anti-clickjacking X-Frame-Options header is not present.

---------------------------------------------------------------------------
+ Target IP:          172.16.27.56
+ Target Hostname:    example.com
+ Target Port:        443
---------------------------------------------------------------------------
+ SSL Info:        Subject: /O=*.mid-day.com/OU=Domain Control Validated/CN=*.mid-day.com
                   Ciphers: DHE-RSA-AES256-GCM-SHA384
                   Issuer:  /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldtech.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435
+ Start Time:         2014-01-10 20:38:36 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ All CGI directories 'found', use '-C none' to test none
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
.....

Usando um proxy

Digamos que um sistema onde o Nikto está rodando só tenha acesso ao host alvo através de um proxy HTTP, o teste ainda pode ser realizado de duas maneiras diferentes. Uma delas é usar o arquivo nikto.conf e outra maneira é executar diretamente da linha de comando.

Usando o arquivo Nikto.conf

Abra o arquivo nikto.conf usando qualquer editor de linha de comando.

[root@localhost nikto-2.1.5]# vi nikto.conf

Procure a variável “PROXY” e remova o comentário do ‘#’ do início das linhas, conforme mostrado. Em seguida, adicione o host proxy, a porta, o usuário proxy e a senha. Salve e feche o arquivo.

Proxy settings -- still must be enabled by -useproxy
PROXYHOST=172.16.16.37
PROXYPORT=8080
PROXYUSER=pg
PROXYPASS=pg

Agora, execute o Nikto usando a opção “-useproxy”. Observe que todas as conexões serão retransmitidas por meio do proxyHTTP.

root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -p 80 -useproxy
Saída de amostra
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2014-01-10 21:28:29 (GMT5.5)
---------------------------------------------------------------------------
+ Server: squid/2.6.STABLE6
+ Retrieved via header: 1.0 netserv:8080 (squid/2.6.STABLE6)
+ The anti-clickjacking X-Frame-Options header is not present.
+ Uncommon header 'x-squid-error' found, with contents: ERR_CACHE_ACCESS_DENIED 0
+ Uncommon header 'x-cache-lookup' found, with contents: NONE from netserv:8080
Usando linha de comando

Para executar o Nikto diretamente da linha de comando usando a opção “-useproxy” definindo o proxy como argumento.

root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -useproxy http://172.16.16.37:8080/
Saída de amostra
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2014-01-10 21:34:51 (GMT5.5)
---------------------------------------------------------------------------
+ Server: squid/2.6.STABLE6
+ Retrieved via header: 1.0 netserv:8080 (squid/2.6.STABLE6)
+ The anti-clickjacking X-Frame-Options header is not present.
+ Uncommon header 'x-squid-error' found, with contents: ERR_CACHE_ACCESS_DENIED 0
+ Uncommon header 'x-cache-lookup' found, with contents: NONE from netserv:8080

Atualizando Nikto

Você pode atualizar o Nikto para os plugins e bancos de dados mais recentes automaticamente, basta executar o comando “-update”.

[root@localhost nikto-2.1.5]# perl nikto.pl -update

Se novas atualizações estiverem disponíveis, você verá uma lista de novas atualizações baixadas.

+ Retrieving 'nikto_report_csv.plugin'
+ Retrieving 'nikto_headers.plugin'
+ Retrieving 'nikto_cookies.plugin'
+ Retrieving 'db_tests'
+ Retrieving 'db_parked_strings'
+ Retrieving 'CHANGES.txt'
+ CIRT.net message: Please submit Nikto bugs to http://trac2.assembla.com/Nikto_2/report/2

Você também pode baixar e atualizar manualmente os plug-ins e bancos de dados do Nikto em http://cirt.net/nikto/UPDATES/.

Links de referência

Página inicial do Nikto