Nikto : pré-analyse rapide de web vunerabilities

Bonjour à tous ! Aujourd'hui, nous allons faire un premier pas dans le domaine de la sécurisation de nos serveurs web, mais pas tous seuls ! Nikto est là pour nous aider !

Nikto ?

Nikto est un scanner de vulnérabilité de votre serveur Web. Il est écrit en Perl. Il permet de rapidement pointer du doigt ce qui pourrait constituer un problème niveau sécurité de vos applications web. Nikto n'a pas vocation à être un outil très discret. En effet, le but premier est d'apporter une réponse rapide, claire et concise sur les vulnérabilités constatées sur un serveur Web et non d'obtenir furtivement des informations afin de mener une attaque. Nikto est conçu pour détecter :
  • Les mauvaises configurations (serveurs comme logiciels)
  • Les fichiers et programmes installés par défaut
  • Les fichiers et programmes mal sécurisés
  • Les versions obsolètes

Fonctionnement

Dans ses versions précédentes, Nikto s'appuyait, comme beaucoup d'outils de sécurisation web, sur les réponses HTTP des serveurs. Cependant, beaucoup d'implémentations ne respectent pas les RFC, de plus, les réponses ne sont pas forcément les mêmes selon le type de fichier (script CGI, html,...). Afin de pallier à ce problème sans avoir à entrer systématiquement dans le contenu, Nikto utilise plutôt une liste d'extension, générée au moment du run. Lors du test d'un élément, si le serveur renvoie un 404 (not found), le résultat (404) sera associé au test de l'élément dans la base de données servant aux tests. Si le serveur répond favorablement (200, ok response), alors il y a examen du contenu renvoyé sur des motifs d'erreur (could not be found...), afin de pouvoir déterminer les éléments non trouvés, et caetera.

Installation

L'installation par les packages est possible, mais elle ne met pas à disposition la toute dernière version, du coup, on va se le faire depuis les sources. Perl mis à part, Nikto n'est pas très exigent en terme de requirements. Il y a quelques modules à installer pour OpenSSL, mais rien qui ne sorte vraiment de l'ordinaire. Le seul élément non standard est fourni avec l'installation de Nikto (il s'agit de LibWhisker, disponible en tant que LW.pm, sur lequel repose tout le fonctionnement). Enfin, depuis les sources est un bien grand mot, puisqu'une fois détaré, Nikto est utilisable en l'état. L'arborescence obtenue est la suivante :
nikto-2.1.1 $ ls -lsa
total 36
4 drwxr-xr-x 5 4096 2010-02-02 20:34 .
4 drwxr-xr-x 4 4096 2010-07-07 12:13 ..
4 drwxr-xr-x 2 4096 2010-02-02 20:34 docs
4 -rw-r--r-- 1 2891 2010-02-02 20:28 nikto.conf
12 -rwxr-xr-x 1 9936 2010-02-02 20:28 nikto.pl
4 drwxr-xr-x 2 4096 2010-02-02 20:30 plugins
4 drwxr-xr-x 2 4096 2010-02-02 20:31 templates

La conf

La conf spécifie les infos :
  • liées au fonctionnement de nitko :
    • répertoire des plugins disponibles
    • niveau de log
    • définition de proxy
    • gestion des cookies
    • ...
  • liées aux scans
    • ports à exclure
    • dénomination des répertoires contenant les scripts cgi, une arborescence pour l'administration, les modules, ...
    • une liste d'utilisateurs à tester
    • ...

Les plugins

Afin de pouvoir déterrer toutes les informations dont vous avez besoin, Nikto s'appuie sur un ensemble de plugins, chacun dédié à un point de vulnérabilité potentielle précis. Ces plugins sont écrits en perl, donc possibilité de s'en coder un sur mesure. La liste des plugins est obtenue par un :
perl nikto.pl -list-plugins
Plugin headers
HTTP Headers - Performs various checks against the headers returned from a HTTP request.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin cgi
CGI - Enumerates possible CGI directories.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin report_text
Text reports - Produces a text report.
Written by Deity, Copyright (C) 2008 CIRT Inc.

Plugin user_enum_apache
Apache User Enumeration - Attempts to enumerate usernames by guessing usernames.
Written by Javier Fernandez-Sanguinoi Pena, Copyright (C) 2008 CIRT Inc.

Plugin embedded
Embedded Detection - Checks to see whether the host is an embedded server.
Written by Deity, Copyright (C) 2009 CIRT Inc.

Plugin msgs
Server Messages - Checks the server version against known issues.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin outdated
Outdated - Checks to see whether the web server is the latest version.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin Tests
Nikto Tests - Test host with the standard Nikto tests
Written by Sullo, Deity, Copyright (C) 2008 CIRT Inc.

Plugin robots
Robots - Checks whether there's anything within the robots.txt file and analyses it for other paths to pass to other scripts.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin report_xml
Report as XML - Produces an XML report.
Written by Sullo/Jabra, Copyright (C) 2008 CIRT Inc.

Plugin put_del_test
Put/Delete test - Attempts to upload and delete files through the PUT and DELETE HTTP methods.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin httpoptions
HTTP Options - Performs a variety of checks against the HTTP options returned from the server.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin passfiles
Password Files - Checks for any files that may potentially contain passwords.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin subdomain
Sub-domain forcer - Attempts to bruteforce commonly known sub-domains
Written by Ryan Dewhurst, Copyright (C) 2009 Ryan Dewhurst

Plugin favicon
Favicon - Checks the web server's favicon against known favicons.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin mutiple_index
Multiple Index - Checks for multiple index files
Written by deity, Copyright (C) 2009 CIRT Inc

Plugin report_csv
CSV reports - Produces a CSV report.
Written by Deity, Copyright (C) 2008 CIRT Inc.

Plugin dictionary
Dictionary attack - Attempts to dictionary attack commonly known directories/files
Written by Deity, Copyright (C) 2009 CIRT Inc

Plugin apacheusers
Apache Users - Checks whether we can enumerate usernames directly from the web server
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin report_html
Report as HTML - Produces an HTML report.
Written by Sullo/Jabra, Copyright (C) 2008 CIRT Inc.

Plugin apache_export_xss
Apache Expect XSS - Checks whether the web servers has a cross-site scripting vulnerability through the Expect: HTTP header
Written by Sullo, Copyright (C) 2008 CIRT Inc.

Plugin mutate
Mutate - Performs various extra independant checks that may not be needed for each scan.
Written by Sullo, Copyright (C) 2008 CIRT Inc.

La LW2.pm

LW2 est connue plus scientifiquement sous le doux sobriquet de Perl HTTP library. Ce pm constitue la base de tout : c'est là-dessus que s'appuie entièrement Nikto. Il s'agit d'une librairie qui réimplémente en Perl certaines fonctionnalités disponibles dans les modules "LWP", "URI", "Digest::MD5", "Digest::MD4", "Data::Dumper", "Authen::NTLM", "HTML::Parser", "HTML::FormParser", "CGI::Upload", "MIME::Base64", et "GetOpt::Std". Le code a été optimisé et rendu autonome (puisque vous n'avez qu'un fichier et non tout une tripotée de pm). Il a aussi été assoupli afin de pouvoir faire exactement ce qui est spécifié, même si cela signifie casser le protocole. Parmis les fonctions implémentées, on retrouve :
  • auth_brute_force, effectue une attaque par bruteforce des mots de passe sur un serveur Web.
  • cookie_*, fonctions relatives à la forge, à la réception et à l'exploitation des données contenues dans un cookie
  • crawl, http crawler
  • encode_anti_ids, fonction qui met en oeuvre des mécanismes d'encodage destinés à perdre les IDS
  • ntlm_*, destinées à éprouver les IIS servers, et bien d'autres...
Le script qui fait tout (ou presque). Pour lancer une analyse nitko, il suffit de faire un
perl nikto.pl
En réalité, nikto.pl effectue en gros une initialisation de l'environnement, puis passe la main à plugins/nikto_core.plugin. C'est donc nikto_core.plugin qui s'occupe d'attaquer la besogne (ce qui explique qu'il soit conséquent), puis chacun des plugins déroulera son code afin de rapatrier les infos qui lui sont demandées.

Un essai ?

$ perl nikto.pl -h bux
---------------------------------------------------------------------------
- Nikto 1.35/1.34     -     www.cirt.net
+ Target IP:       192.168.206.1
+ Target Hostname: bux
+ Target Port:     80
+ Start Time:      Wed Jul  14 11:03:12 2010
---------------------------------------------------------------------------
- Scan is dependent on "Server" string which can be faked, use -g to override
+ Server: Apache/2.0.54 (Debian GNU/Linux) PHP/5.3.2
- Retrieved X-Powered-By header: PHP/5.3.2
+ /robots.txt - contains 10 'disallow' entries which should be manually viewed (added to mutation file lists) (GET).
+ 2.0.54 (Debian GNU/Linux) PHP/5.3.2 - TelCondex Simpleserver 2.13.31027 Build 3289 and below allow directory traversal with '/.../' entries.
+ /~root - Enumeration of users is possible by requesting ~username (responds with Forbidden for real users, not found for non-existent users) (GET).
+ /ganglia/ - Ganglia Cluster reports reveal detailed information. (GET)
+ /index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 - PHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings. OSVDB-12184. (GET)
+ /index.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 - PHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings. OSVDB-12184. (GET)
+ /index.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 - PHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings. OSVDB-12184. (GET)
+ /index.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 - PHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings. OSVDB-12184. (GET)
+ /index.php?module=My_eGallery - My_eGallery prior to 3.1.1.g are vulnerable to a remote execution bug via SQL command injection. (GET)
+ /index.php?top_message=<script>alert(document.cookie)</script>  - Led-Forums allows any user to change the welcome message, and it is vulnerable to Cross Site Scripting (XSS). CA-2000-02. (GET)
+ /cgi-bin/test.cgi - This might be interesting... (GET)
+ /index.php?base=test%20 - This might be interesting... has been seen in web logs from an unknown scanner. (GET)
+ /index.php?IDAdmin=test - This might be interesting... has been seen in web logs from an unknown scanner. (GET)
+ /index.php?pymembs=admin - This might be interesting... has been seen in web logs from an unknown scanner. (GET)
+ /index.php?SqlQuery=test%20 - This might be interesting... has been seen in web logs from an unknown scanner. (GET)
+ /index.php?tampon=test%20 - This might be interesting... has been seen in web logs from an unknown scanner. (GET)
+ /index.php?topic=<script>alert(document.cookie)</script>%20 - This might be interesting... has been seen in web logs from an unknown scanner. (GET)
+ 3184 items checked - 16 item(s) found on remote host(s)
+ End Time:        Wed Jul  14 11:03:41 2010 (29 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
Voila ce qui arrive, quand on installe par-dessus la jambe... Alors, bien évidemment, vous verrez que Nikto est beaucoup trop bavard et pollue intempestivement les logs de vos serveurs web, mais il constitue déjà un premier déblayage en ce qui concerne la sécurisation de vos serveurs web. Si, en revanche, vous préférez un outil plus discret, moins spécifique, et plus couteau suisse, p0f est à votre disposition et mérite largement le coup d'œil (après tout, il est inclue dans de grands outils comme Ettercap, et Prelude IDS...). Mais attention, les objectifs ne sont pas les mêmes... Enjoy !
Vus : 1758
Publié par K-Tux : 59