Ricerca nel sito web

Nikto: vulnerabilità delle applicazioni Web e scanner CGI per server Web


Nikto Web Scanner è un altro strumento utile nell'arsenale di qualsiasi amministratore Linux. Si tratta di uno scanner web open source rilasciato con licenza GPL, utilizzato per eseguire test completi su server Web per più elementi, inclusi oltre 6500 file/CGI potenzialmente pericolosi .

Lettura consigliata: WPSeku – Uno scanner di vulnerabilità per individuare problemi di sicurezza in WordPress

È stato scritto da Chris Solo e David Lodge per la valutazione della vulnerabilità, verifica la presenza di versioni obsolete su 1250 server Web e oltre 270 problemi specifici della versione. Inoltre, esegue la scansione e segnala la presenza di software e plug-in del server Web obsoleti.

Caratteristiche di Nikto Web Scanner

  1. Supporta SSL
  2. Supporta proxy HTTP completo
  3. Supporta testo, HTML, XML e CSV per salvare i report.
  4. Scansione per più porte
  5. Può eseguire la scansione su più server prendendo input da file come l'output di nmap
  6. Supporta l'ID LibWhisker
  7. Abbastanza capace da identificare il software installato con intestazioni, file e favicon
  8. Registri per Metasploit
  9. Rapporti per intestazioni "insolite".
  10. Enumerazione degli utenti Apache e cgiwrap
  11. Autentica gli host con Basic e NTLM
  12. Le scansioni possono essere messe in pausa automaticamente a un orario specificato.

Requisiti di Nikto

Un sistema con installazione di base di Perl, Moduli Perl e OpenSSL dovrebbe consentire l'esecuzione di Nikto. È stato accuratamente testato su Windows, Mac OSX e varie distribuzioni Unix/Linux come Red Hat, Debian, Ubuntu, BackTrack, ecc.

Installazione di Nikto Web Scanner su Linux

La maggior parte dei sistemi Linux odierni viene fornita con pacchetti Perl, Perl Modules e OpenSSL preinstallati. Se non inclusi, puoi installarli utilizzando l'utilità di gestione dei pacchetti di sistema predefinita chiamata yum o apt-get.

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

Successivamente, clona gli ultimi file sorgente Nikto stabili dal suo repository Github, spostati nella directory Nikto/programs/ ed eseguilo utilizzando perl:

git clone https://github.com/sullo/nikto.git
cd nikto/programs
perl nikto.pl -h 
Uscita del campione
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.

L'opzione "L'host dell'opzione richiede un argomento" indica chiaramente che non abbiamo incluso i parametri necessari durante il test. Quindi, dobbiamo aggiungere un parametro di base necessario per eseguire un test.

Test di base

La scansione di base richiede un host che desideri prendere di mira, per impostazione predefinita esegue la scansione della porta 80 se non viene specificato nulla. L'host può essere un nome host o un indirizzo IP di un sistema. Puoi specificare un host utilizzando l'opzione "-h".

Ad esempio, voglio eseguire una scansione su un IP 172.16.27.56 sulla porta TCP 80.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56
Uscita del campione
- 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 desideri eseguire la scansione su un numero di porta diverso, aggiungi l'opzione "-p" [-port]. Ad esempio, voglio eseguire una scansione sull'IP 172.16.27.56 sulla porta TCP 443.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 443
Uscita del campione
- 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

Puoi anche specificare host, porte e protocolli utilizzando la sintassi URL completa e il file verrà scansionato.

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

Puoi anche scansionare qualsiasi sito web. Ad esempio, qui ho eseguito una scansione su google.com.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h http://www.google.com
Uscita del campione
- 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)
….

Il comando precedente eseguirà una serie di richieste http (ovvero più di 2000 test) sul server web.

Test su più porte

Puoi anche eseguire la scansione di più porte nella stessa sessione. Per scansionare più porte sullo stesso host, aggiungi l'opzione "-p" [-port] e specifica l'elenco delle porte. Le porte possono essere definite come un intervallo (ad esempio 80-443) o come separate da virgole (ad esempio 80.443). Ad esempio, voglio scansionare le porte 80 e 443 sull'host 172.16.27.56.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 80,443
Uscita del campione
- 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.
.....

Utilizzando un proxy

Supponiamo che un sistema in cui è in esecuzione Nikto abbia accesso all'host di destinazione solo tramite un proxy HTTP, il test può comunque essere eseguito utilizzando due modi diversi. Uno utilizza il file nikto.conf e un altro modo è eseguirlo direttamente dalla riga di comando.

Utilizzando il file Nikto.conf

Apri il file nikto.conf utilizzando qualsiasi editor della riga di comando.

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

Cerca la variabile "PROXY" e decommenta il "#" dall'inizio delle righe come mostrato. Quindi aggiungi l'host proxy, la porta, l'utente proxy e la password. Salva e chiudi il file.

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

Ora esegui Nikto utilizzando l'opzione “-useproxy”. Tieni presente che tutte le connessioni verranno inoltrate tramite il proxy HTTP.

root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -p 80 -useproxy
Uscita del campione
- 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
Utilizzando la riga di comando

Per eseguire Nikto direttamente dalla riga di comando utilizzare l'opzione “-useproxy” impostando il proxy come argomento.

root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -useproxy http://172.16.16.37:8080/
Uscita del campione
- 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

Aggiornamento di Nikto

Puoi aggiornare Nikto ai plugin e ai database più recenti automaticamente, semplicemente eseguendo il comando "-update".

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

Se sono disponibili nuovi aggiornamenti, verrà visualizzato un elenco dei nuovi aggiornamenti scaricati.

+ 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

Puoi anche scaricare e aggiornare manualmente i plugin e i database Nikto da http://cirt.net/nikto/UPDATES/.

Collegamenti di riferimento

Nikto Homepage