Nikto: una vulnerabilitat d'aplicacions web i escàner CGI per a servidors web


Nikto Web Scanner és una altra eina útil per a l'arsenal de qualsevol administrador de Linux. És un escàner web de codi obert publicat sota la llicència GPL, que s'utilitza per realitzar proves exhaustives en servidors web per a diversos elements, inclosos més de 6500 fitxers/CGI potencialment perillosos.

Està escrit per Chris Solo i David Lodge per a l'avaluació de vulnerabilitats, verifica si hi ha versions obsoletes en 1250 servidors web i més de 270 problemes específics de versió. També escaneja i informa de programari i complements de servidor web obsolets.

Característiques de Nikto Web Scanner

  1. Admet SSL
  2. Admet el servidor intermediari HTTP complet
  3. Admet text, HTML, XML i CSV per desar informes.
  4. Busca diversos ports
  5. Pot escanejar en diversos servidors agafant entrades de fitxers com la sortida de nmap
  6. Admet LibWhisker IDS
  7. Prou capaç d'identificar el programari instal·lat amb capçaleres, fitxers i favicons
  8. Registres de Metasploits
  9. Informes per a capçaleres inusuals.
  10. Enumeració d'usuaris d'Apache i cgiwrap
  11. Autentiqueu els amfitrions amb Basic i NTLM
  12. Les exploracions es poden aturar automàticament en un moment especificat.

Requisits Nikto

Un sistema amb instal·lació bàsica de Perl, mòduls Perl i OpenSSL hauria de permetre que Nikto s'executi. S'ha provat a fons a Windows, Mac OSX i diverses distribucions Unix/Linux com Red Hat, Debian, Ubuntu, BackTrack, etc.

Instal·lació de Nikto Web Scanner a Linux

La majoria dels sistemes Linux actuals inclouen paquets Perl, mòduls Perl i OpenSSL preinstal·lats. Si no s'inclouen, podeu instal·lar-los mitjançant la utilitat predeterminada del gestor de paquets del sistema anomenada yum o apt-get.

 yum install perl perl-Net-SSLeay openssl
 apt-get install perl openssl libnet-ssleay-perl

A continuació, cloneu els darrers fitxers d'origen estables de Nikto del seu dipòsit Github, aneu al directori Nikto/programs/ i executeu-los amb perl:

$ git clone https://github.com/sullo/nikto.git
$ cd nikto/programs
$ perl nikto.pl -h 
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'opció \L'amfitrió de l'opció requereix un argument indica clarament que no hem inclòs els paràmetres necessaris durant una prova. Per tant, hem d'afegir un paràmetre bàsic necessari per fer una prova.

L'exploració bàsica requereix un amfitrió al qual voleu orientar, de manera predeterminada, explora el port 80 si no s'especifica res. L'amfitrió pot ser un nom d'amfitrió o una adreça IP d'un sistema. Podeu especificar un host mitjançant l'opció \-h.

Per exemple, vull fer una exploració en una IP 172.16.27.56 al port TCP 80.

 perl nikto.pl -h 172.16.27.56
- 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

Si voleu escanejar en un número de port diferent, afegiu l'opció \-p [-port]. Per exemple, vull fer una exploració a l'IP 172.16.27.56 al port TCP 443.

 perl nikto.pl -h 172.16.27.56 -p 443
- 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

També podeu especificar amfitrions, ports i protocols mitjançant una sintaxi d'URL completa i s'escanejarà.

 perl nikto.pl -h http://172.16.27.56:80

També podeu escanejar qualsevol lloc web. Per exemple, aquí vaig fer una exploració a google.com.

 perl nikto.pl -h http://www.google.com
- 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)
….

L'ordre anterior realitzarà un munt de sol·licituds http (és a dir, més de 2000 proves) al servidor web.

També podeu realitzar una exploració de diversos ports en la mateixa sessió. Per escanejar diversos ports al mateix host, afegiu l'opció -p [-port] i especifiqueu la llista de ports. Els ports es poden definir com un interval (és a dir, 80-443) o separats per comes (és a dir, 80.443). Per exemple, vull escanejar els ports 80 i 443 de l'amfitrió 172.16.27.56.

 perl nikto.pl -h 172.16.27.56 -p 80,443
- 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.
.....

Suposem que un sistema on Nikto s'executa només té accés a l'amfitrió objectiu mitjançant un servidor intermediari HTTP, la prova encara es pot realitzar de dues maneres diferents. Un està utilitzant el fitxer nikto.conf i una altra manera és executar directament des de la línia d'ordres.

Obriu el fitxer nikto.conf amb qualsevol editor de línia d'ordres.

 vi nikto.conf

Cerqueu la variable PROXY i descomenteu el # des del principi de les línies tal com es mostra. A continuació, afegiu l'amfitrió del proxy, el port, l'usuari del proxy i la contrasenya. Desa i tanca el fitxer.

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

Ara, executeu el Nikto mitjançant l'opció -useproxy. Tingueu en compte que totes les connexions es transmetran mitjançant el servidor intermediari HTTP.

[email  nikto-2.1.5]# perl nikto.pl -h localhost -p 80 -useproxy
- 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

Per executar el Nikto directament des de la línia d'ordres utilitzant l'opció -useproxy configurant el proxy com a argument.

[email  nikto-2.1.5]# perl nikto.pl -h localhost -useproxy http://172.16.16.37:8080/
- 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

Podeu actualitzar Nikto als darrers connectors i bases de dades automàticament, simplement executeu l'ordre -update.

 perl nikto.pl -update

Si hi ha actualitzacions noves disponibles, veureu una llista de les actualitzacions noves baixades.

+ 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

També podeu descarregar i actualitzar manualment els connectors i bases de dades Nikto des de http://cirt.net/nikto/UPDATES/.

Enllaços de referència

Pàgina d'inici de Nikto