Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Nikto: scovare le vulnerabilità dei web server

Nikto è un software che analizza le vulnerabilità di un web server, sfruttando un database di file e configurazioni vulnerabili note: ecco come utilizzarlo.
Nikto è un software che analizza le vulnerabilità di un web server, sfruttando un database di file e configurazioni vulnerabili note: ecco come utilizzarlo.
Link copiato negli appunti

Nikto è un software open source, programmato e mantenuto da Chris Sullo e David Lodge, che effettua vulnerability assessment sui web server. Esso include un database di file e configurazioni notoriamente vulnerabili a varie tipologie di attacchi.

Il punto forte di questo software è la tecnologia nell'individuazione degli errori: non tutti i server infatti rispettano lo standard RFC nell'invio della risposta (200 – OK o 404 – Not Found), ma potrebbero rispondere con un 200 quando invece la risorsa richiesta non esiste o è nello stato "Forbidden". Nikto verifica le risposte attraverso checksum e leggendo il testo presente nella risposta, riducendo così al minimo i falsi positivi.

Un altro suo punto di forza è la tecnologia dell'evasion: esso infatti include metodi per eludere i controlli applicati da WAF o IPS.

È scritto in Perl, perciò è compatibile con qualsiasi sistema operativo e sulla maggior parte delle distribuzioni Linux è già pacchettizzato. Su Kali e BackBox lo si può trovare preinstallato di default.

Test di base

La scansione più semplice che si può effettuare con Nikto richiede un hostname o IP come parametro.

nikto -h http://192.168.0.2/

Così facendo assumiamo che la porta su cui effettuare la scansione sia per default la 80 (HTTP). Per specificare una porta differente si usa il parametro -p (minuscolo) oppure -port:

nikto -h http://192.168.0.2/ -p 443

Host, porta e protocollo si possono anche specificare utilizzando la seguente sintassi alternativa:

nikto -h https://192.168.0.2:443/

Per default, Nikto effettua i test sul protocollo http, ed in caso di errore passa direttamente ad HTTPS. Se però si vuole specificare di avviare subitouna scansione sulla porta SSL, è necessario aggiungere il parametro -ssl:

nikto -h 192.168.0.2 -p 443 -ssl

Se si vogliono specificare più porte (per esempio perché il nostro target sta eseguendo due o più web server distinti), si usa la seguente sintassi (moltosimile a quella di NMap):

nikto -h 192.168.0.2 -p 80,88,443

Nel caso in cui invece abbiamo più host (e/o IP) da scansionare, possiamo passare un file al parametro -h:

nikto -h lista_siti.txt

Nel comando precedente, lista_siti.txt deve contenere un host per ogni linea. Il testo seguente è un valido esempio:

192.168.1.1:80
https://192.168.1.2:8080/
www.sitolocale.it

Talvolta può rivelarsi necessario far sì che tutto il traffico passi attraverso un proxy. Possiamo specificarlo tramite il parametro -useproxy:

nikto -h 192.168.0.2 -p 80 -useproxy http://localhost:8080/

Un esempio di applicazione del comando precente si ha quando si vogliono tracciare tutte le richieste effettuate da Nikto, per documentare la propria attività di assessment.

La prima scansione

Una volta chiarito il funzionamento ed i parametri da passare a Nikto, non resta che iniziare ad utilizzarlo. Prima di cominciare aggiorniamo tutti i plugin di Nikto tramite il comando seguente:

sudo nikto -update

Questo comando si connette al repository per prelevare l'ultima versione del database con i file e le directory notoriamente vulnerabili.

Una volta effettuato l'update, potremo l'assessment di un web server. Dal momento che il tempo di scansione dipende molto dalla velocità della nostra connessione, abbiamo la possibilità di visualizzare maggiori dati utilizzando la modalità interattiva (che però funziona solo su sistemi con POSIX abilitato):

Tasto Azione
SPAZIO Mostra lo stato corrente della scansione
v Attiva o disattiva la modalità verbose
d Attiva o disattiva la modalità debug
e Attiva o disattiva l'error reporting
p Attiva o disattiva la modalità progress reporting
r Attiva o disattiva la modalità redirect
c Attiva o disattiva la visualizzazione dei cookie
o Attiva o disattiva la visualizzazione delle risposte "200"
a Attiva o disattiva la modalità auth
q Termina la modalità interattiva
N Passa all'host successivo nella lista
P Mette in pausa la scansione

In alternativa, possiamo specificare una delle azioni precedenti direttamente dalla linea di comando. Ad esempio, se vogliamo visualizzare il progresso della scansione come output sul terminale, useremo:

nikto -h http://192.168.0.2:80/ -Display P

Dal momento che aspettare il risultato delle scansioni senza vedere nessun output può risultare snervante e noioso, è preferibile utilizzare l'opzione vista nel comando precedente.

Link utili

Scansioni personalizzate

In Nikto è anche possibile specificare solo un determinato tipo di scansione. Il parametro che si occupa di questo è -T (che sta per Tuning). I valori accettati sono i seguenti:

Valore Descrizione
0 Attacchi di tipo Arbitrary File upload
1 File interessanti
2 Misconfiguration o default file
3 Informational disclosure, file relativamente utili ad un attacco
4 Injection Flaws (ad esempio XSS)
5 Attacchi di tipo "Remote file Retrival", all'interno della web root
6 Attacchi di tipo Denial of Service
7 Attacchi di tipo "Remote file Retrival", all'interno di tutto il sistema bersaglio
8 Attacchi di tipo Command Execution
9 Attacchi di tipo SQL Injection
a Attacchi di tipo Authentication Bypass
b Identificazione del software installato
c Attacchi di tipo Remote file inclusion

Se vogliamo invece effettuare solo pochi test, ed escluderne altri, basterà utilizzare l'opzione x come in esempio:

nikto -h http://192.168.0.2:80/ -T 12xc

In questo esempio, saranno effettuati solo i casi 1 e 2, escludendo quelli rappresentati dalla lettera c.

Uso dei plugin

Nikto, come ogni buon software, è modulare: esso offre la possibilità di aggiungere componenti che arricchiscono il funzionamento base del programma. Per vedere tutti i plugin disponibili sulla versione di Nikto installata, si utilizza il comando seguente:

nikto -list-plugins

Per richiamare un plugin si usa il parametro -Plugin. Vediamo un esempio pratico utilizzandone uno, chiamato apacheusers, che si occupa di enumerare gli username all'interno del web server Apache.

nikto -host targets.txt -Plugins "apacheusers(enumerate,dictionary:users.txt)" -output apacheusers.xml

I valori dentro le parentesi specificano che vogliamo effettuare un’enumerazione (enumerate) attraverso un dizionario (dictionary) che si chiama users.txt. Un’opzione che non avevamo ancora visto è -output, che scrive semplicemente i risultati su un file in formato XML.

Vediamo ora come usare il plugin subdomain, che, attraverso un dizionario interno, ricerca domini di terzo livello nell'host sotto esame:

nikto -h http://192.168.0.2/ -Plugin subdomain

Metodi di Evasione

Nikto offre anche la possibilità di implementare dei metodi di evasione, atti ad eludere i WAF (Web Application Firewall) o altri sistemi di protezione presenti sul sito bersaglio. I metodi sono richiamabili tramite il parametro -evasion, e possiamo scegliere fra le opzioni seguenti:

Opzione Descrizione
1 Codifica randomica dell'URI (non-UTF8)
2 Riferimento diretto su directory (/./)
3 Fine prematura dell'URL
4 Appendere una stringa lunga e randomica
5 Parametri fake in mezzo alla richiesta
6 TAB invece di usare lo spazio
7 Cambio di maiuscole e minuscole
8 Uso del separatore di directory come Windows ()
A Uso dell'INVIO (0x0d) come spaziatore fra le richieste
B Uso del valore binario 0x0b come spaziatore fra le richieste

Un esempio è il seguente:

nikto -h http://192.168.0.2/ -evasion 2

Così facendo tutte le directory o file verranno richiamati con "/./", sperando così di confondere il WAF o l'IPS.

Output di Nikto

Prima di concludere, è bene analizzare i risultati prodotti da una scansione effettuata con Nikto. Di seguito è mostro un output di esempio:

nikto  -h http://127.0.0.1:80/
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Port:        80
+ Start Time:         2014-10-08 22:39:20 (GMT1)
---------------------------------------------------------------------------
+ Server: nginx
+ Uncommon header 'x-permitted-cross-domain-policies' found, with contents: : master-only
+ Uncommon header 'strict-transport-security' found, with contents: max-age=31536000
+ Uncommon header 'x-content-type-options' found, with contents: nosniff
+ Uncommon header 'x-frame-options' found, with contents: SAMEORIGIN
+ Uncommon header 'x-xss-protection' found, with contents: 1; mode=block
+ Uncommon header 'x-pingback' found, with contents: http://127.0.01/xmlrpc.php
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Server leaks inodes via ETags, header found with file /robots.txt, fields: 0x52fb948b 0x77
+ File/dir '/test/' in robots.txt returned a non-forbidden or redirect HTTP code (302)
+ File/dir '/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ "robots.txt" contains 2 entries which should be manually viewed.
+ Server banner has changed from 'nginx' to 'nginx/1.7.4' which may suggest a WAF, load balancer or proxy is in place
+ OSVDB-3092: /sitemap.xml: This gives a nice listing of the site content.
+ OSVDB-3092: /xmlrpc.php: xmlrpc.php was found.
+ /wp-content/plugins/akismet/readme.txt: The WordPress Akismet plugin 'Tested up to' version usually matches the WordPress version
+ OSVDB-3092: /license.txt: License file found may identify site software.
+ /wordpress/: A WordPress installation was found.
+ 6545 items checked: 1 error(s) and 16 item(s) reported on remote host
+ End Time:           2014-10-08 22:49:21 (GMT1) (601 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

L'output generato da Nikto è molto intuitivo e fornisce addirittura una piccola descrizione della vulnerabilità del servizio. In aggiunta, il numero OSVDB ci permette di verificare manualmente la vulnerabilità.

Infine, possiamo anche scegliere tra vari metodi di salvataggio dei risultati:

Opzione Descrizione
csv Comma-separated-value
htm Formato HTML
msf Log su una sessione attiva di Metasploit
nbe Formato Nessus
txt Testo semplice
xml Formato XML

Le opzioni di salvataggio sopra elencate possono essere utilizzate come segue:

nikto -h http://192.168.0.2/ -o risultati -Format txt

Si può anche omettere l'opzione -Format, a patto che si includa esplicitamente l'estensione nel nome del file di output (opzione -o):

nikto -h http://192.168.0.2/ -o risultati.txt

Per avere una visione generale di tutte le potenzialità di Nikto, si faccia riferimento al menu mostrato digitando il comando seguente:

nikto -H

Ti consigliamo anche