Recherche de site Web

Nikto - Une vulnérabilité d'application Web et un scanner CGI pour les serveurs Web


Nikto Web Scanner est un autre outil indispensable pour l'arsenal de tout administrateur Linux. Il s'agit d'un scanner Web Open source publié sous licence GPL, qui est utilisé pour effectuer des tests complets sur les serveurs Web pour plusieurs éléments, y compris plus de 6 500 fichiers/CGI potentiellement dangereux. .

Lecture suggérée : WPSeku – Un scanner de vulnérabilités pour détecter les problèmes de sécurité dans WordPress

Il est écrit par Chris Solo et David Lodge pour l'évaluation des Vulnérabilités, il vérifie les versions obsolètes sur 1 250 serveurs Web et plus de 270 problèmes spécifiques à la version. Il analyse et signale également les logiciels et plugins de serveur Web obsolètes.

Caractéristiques du scanner Web Nikto

  1. Prend en charge SSL
  2. Prend en charge le proxy HTTP complet
  3. Prend en charge le texte, HTML, XML et CSV pour enregistrer des rapports.
  4. Rechercher plusieurs ports
  5. Peut numériser sur plusieurs serveurs en prenant les entrées de fichiers comme la sortie nmap
  6. Prise en charge des identifiants LibWhisker
  7. Suffisamment capable d'identifier les logiciels installés avec des en-têtes, des fichiers et des favicons
  8. Journaux pour les métasploits
  9. Rapports pour les en-têtes « inhabituels ».
  10. Énumération des utilisateurs Apache et cgiwrap
  11. Authentifier les hôtes avec Basic et NTLM
  12. Les analyses peuvent être automatiquement suspendues à une heure spécifiée.

Exigences Nikto

Un système avec une installation de base Perl, Modules Perl et OpenSSL devrait permettre à Nikto de fonctionner. Il a été minutieusement testé sur Windows, Mac OSX et diverses distributions Unix/Linux telles que Red Hat, Debian, Ubuntu, BackTrack, etc.

Installation de Nikto Web Scanner sous Linux

La plupart des systèmes Linux actuels sont livrés avec des packages Perl, Perl et OpenSSL préinstallés. S'ils ne sont pas inclus, vous pouvez les installer à l'aide de l'utilitaire de gestion de packages système par défaut appelé yum ou apt-get.

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

Ensuite, clonez les derniers fichiers sources Nikto stables depuis son référentiel Github, déplacez-vous dans le répertoire Nikto/programs/ et exécutez-le en utilisant Perl :

git clone https://github.com/sullo/nikto.git
cd nikto/programs
perl nikto.pl -h 
Exemple de sortie
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.

Le « L'option hôte nécessite un argument » indique clairement que nous n'avons pas inclus les paramètres nécessaires lors d'un test. Nous devons donc ajouter un paramètre de base nécessaire pour effectuer un test.

Tests de base

L'analyse de base nécessite un hôte que vous souhaitez cibler. Par défaut, elle analyse le port 80 si rien n'est spécifié. L'hôte peut être soit un nom d'hôte, soit une adresse IP d'un système. Vous pouvez spécifier un hôte en utilisant l'option « -h ».

Par exemple, je souhaite faire un scan sur une IP 172.16.27.56 sur le port TCP 80.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56
Exemple de sortie
- 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 vous souhaitez numériser sur un numéro de port différent, ajoutez l'option « -p » [-port]. Par exemple, je souhaite effectuer une analyse sur l'IP 172.16.27.56 sur le port TCP 443.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 443
Exemple de sortie
- 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

Vous pouvez également spécifier des hôtes, des ports et des protocoles en utilisant une syntaxe URL complète, et ils seront analysés.

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

Vous pouvez également analyser n’importe quel site Web. Par exemple, j'ai effectué ici une analyse sur google.com.

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

La commande ci-dessus effectuera un ensemble de requêtes http (c'est-à-dire plus de 2000 tests) sur le serveur Web.

Test de plusieurs ports

Vous pouvez également effectuer une analyse de plusieurs ports au cours de la même session. Pour analyser plusieurs ports sur le même hôte, ajoutez l'option « -p » [-port] et spécifiez la liste des ports. Les ports peuvent être définis sous forme de plage (c'est-à-dire 80-443) ou sous forme de virgules séparées (c'est-à-dire 80 443). Par exemple, je souhaite analyser les ports 80 et 443 sur l'hôte 172.16.27.56.

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

Utiliser un proxy

Supposons qu'un système sur lequel Nikto est exécuté n'ait accès à l'hôte cible que via un proxy HTTP, le test peut toujours être effectué de deux manières différentes. L'une consiste à utiliser le fichier nikto.conf et l'autre consiste à l'exécuter directement à partir de la ligne de commande.

Utilisation du fichier Nikto.conf

Ouvrez le fichier nikto.conf à l'aide de n'importe quel éditeur de ligne de commande.

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

Recherchez la variable « PROXY » et décommentez le « # » depuis le début des lignes, comme indiqué. Ajoutez ensuite l'hôte proxy, le port, l'utilisateur proxy et le mot de passe. Enregistrez et fermez le fichier.

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

Maintenant, exécutez Nikto en utilisant l'option « -useproxy ». Veuillez noter que toutes les connexions seront relayées via le proxy HTTP.

root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -p 80 -useproxy
Exemple de sortie
- 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
Utiliser la ligne de commande

Pour exécuter Nikto directement depuis la ligne de commande en utilisant l'option « -useproxy » en définissant le proxy comme argument.

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

Mise à jour de Nikto

Vous pouvez mettre à jour automatiquement Nikto vers les derniers plugins et bases de données, exécutez simplement la commande « -update ».

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

Si de nouvelles mises à jour sont disponibles, vous verrez une liste des nouvelles mises à jour téléchargées.

+ 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

Vous pouvez également télécharger et mettre à jour manuellement les plugins et les bases de données Nikto à partir du http://cirt.net/nikto/UPDATES/.

Liens de référence

Page d'accueil de Nikto