
Dans le passé, nous avons parlé de Nemesida WAF Free un outil gratuit pour protéger les sites web et les API contre les attaques de hackers, et dans cet article, nous avons décidé de faire un aperçu d'un scanner de vulnérabilités populaire .
Le scan de vulnĂ©rabilitĂ©s d'un site est une mesure nĂ©cessaire qui, couplĂ©e Ă l'analyse du code source, permet d'Ă©valuer le niveau de sĂ©curitĂ© face aux menaces de compromission. Le scan d'une ressource web peut ĂȘtre effectuĂ© Ă l'aide d'outils spĂ©cialisĂ©s.
Nikto, W3af (développé en Python 2.7, dont le support a pris fin) ou Arachni (qui n'est plus pris en charge depuis février) sont les solutions les plus populaires proposées dans le segment gratuit. Bien sûr, il existe d'autres solutions, comme Wapiti, sur laquelle nous avons décidé de nous concentrer.
Wapiti fonctionne avec les types de vulnérabilités suivants :
- divulgation de fichiers (locaux et distants, fopen, readfile);
- injections (injections PHP / JSP / ASP / SQL et XPath);
- XSS (cross-site scripting) (réfléchi et persistant);
- découverte et exécution de commandes (eval (), system (), passthru ());
- injections CRLF (séparation des réponses HTTP, fixation de session);
- XXE (injection d'entité externe XML);
- SSRF (falsification de requĂȘte cĂŽtĂ© serveur);
- utilisation de fichiers potentiellement dangereux connus (grùce à la base de données Nikto);
- configurations .htaccess faibles qui peuvent ĂȘtre contournĂ©es;
- présence de fichiers de sauvegarde révélant des informations sensibles (divulgation de code source);
- Shellshock;
- redirections ouvertes;
- mĂ©thodes HTTP non standards qui peuvent ĂȘtre autorisĂ©es (PUT).
Fonctionnalités :
- support des proxy HTTP, HTTPS et SOCKS5;
- authentification par plusieurs méthodes : Basique, Digest, Kerberos ou NTLM;
- possibilité de limiter la portée du scan (domaine, dossier, page, URL);
- suppression automatique d'un des paramĂštres de l'URL;
- mesures multiples de précaution contre les cycles infinis de scan (exemple : ifor, limitation des valeurs pour le paramÚtre);
- possibilitĂ© de dĂ©finir une prioritĂ© pour explorer les URL (mĂȘme si elles ne se trouvent pas dans la portĂ©e du scan);
- possibilité d'exclure certaines URL du scan et des attaques (par exemple : URL de déconnexion);
- importation de fichiers cookies (les obtenir Ă l'aide de l'outil wapiti-getcookie);
- possibilité d'activer / désactiver la vérification des certificats SSL;
- possibilité d'extraire des URL à partir de JavaScript (un interpréteur JS trÚs simple);
- interaction avec HTML5;
- plusieurs options pour gérer le comportement et les restrictions du crawler ;
- définition d'un temps maximal pour le processus d'exploration ;
- ajout de certains en-tĂȘtes HTTP personnalisables ou configuration d'un User-Agent personnalisĂ©.
Fonctionnalités supplémentaires :
- génération de rapports de vulnérabilités dans divers formats (HTML, XML, JSON, TXT) ;
- suspension et reprise des explorations ou attaques (mécanisme de session utilisant des bases de données SQLite3) ;
- mise en surbrillance dans le terminal pour signaler une vulnérabilité ;
- différents niveaux de journalisation ;
- une maniÚre rapide et simple d'activer / désactiver les modules d'attaque.
Installation
La version actuelle de Wapiti peut ĂȘtre installĂ©e de 2 maniĂšres :
- télécharger la source depuis le site officiel et exécuter le script d'installation, aprÚs avoir installé Python3 ;
- en utilisant la commande pip3 install wapiti3.
AprĂšs cela, Wapiti sera prĂȘt Ă fonctionner.
Utilisation de l'outil
Pour démontrer le fonctionnement de Wapiti, nous utiliserons une plateforme préparée matches.vulns.pentestit.ru (ressource interne) contenant diverses vulnérabilités (Injection, XSS, LFI / RFI) et d'autres défauts des applications web.
Les informations sont fournies à titre d'exemple uniquement. Ne violez pas la législation !
Commande de base pour démarrer le scanner :
# wapiti -u <target> <options>Il existe une documentation assez détaillée avec un grand nombre d'options de lancement, par exemple :
âscope â domaine d'application
Si le paramĂštre scope est spĂ©cifiĂ© en mĂȘme temps que l'URL Ă explorer, il est possible de rĂ©gler le pĂ©rimĂštre d'exploration du site en prĂ©cisant soit une page spĂ©cifique, soit toutes les pages pouvant ĂȘtre trouvĂ©es sur le site.
-s et -x â paramĂštres pour ajouter ou supprimer des URL spĂ©cifiques. Ces paramĂštres sont utiles lorsqu'il est nĂ©cessaire d'ajouter ou de retirer une URL spĂ©cifique du processus d'exploration.
âskip â la clĂ© de ce paramĂštre sera scannĂ©e, mais ne sera pas attaquĂ©e. Utile s'il y a des paramĂštres dangereux Ă exclure lors de l'exploration.
âverify-ssl â activation ou dĂ©sactivation de la vĂ©rification du certificat.
Le scanner Wapiti est modulaire. Cependant, pour exécuter des modules spécifiques parmi ceux qui sont automatiquement connectés lors de l'exécution du scanner, il faut utiliser la clé -m et énumérer ceux-ci séparément par des virgules. Si la clé n'est pas utilisée, tous les modules fonctionneront par défaut. Dans la version la plus simple, cela ressemblera à ce qui suit :
# wapiti -u http://sites.vulns.pentestit.ru/ -m sql,xss,xxeCet exemple d'utilisation signifie que nous n'utiliserons que les modules SQL, XSS et XXE lors du scan de la cible. En outre, il est possible de filtrer le fonctionnement des modules en fonction de la mĂ©thode requise. Par exemple -m "xss: get, blindsql: post, xxe: post". Dans ce cas, le module xss sera appliquĂ© aux requĂȘtes transmises par la mĂ©thode GET, tandis que le module blibdsql sera utilisĂ© pour les requĂȘtes POST, etc. D'ailleurs, si un module qui a Ă©tĂ© inclus dans la liste n'est pas nĂ©cessaire pendant le scan ou fonctionne trĂšs longtemps, en appuyant sur la combinaison Ctrl+C, il est possible de sauter l'utilisation du module actuel en choisissant l'option correspondante dans le menu interactif.
Wapiti prend en charge l'envoi de requĂȘtes via un serveur proxy en utilisant la clĂ© -p et l'authentification sur le site cible via le paramĂštre -a. Il est Ă©galement possible d'indiquer le type d'authentification : BasiŃ, Digest, Kerberos et NTLM. Pour les deux derniers, des modules supplĂ©mentaires peuvent ĂȘtre requis. De plus, il est possible d'insĂ©rer dans les requĂȘtes n'importe quel en-tĂȘte (y compris un User-Agent) et bien d'autres.
Pour utiliser l'authentification, on peut utiliser l'outil wapiti-getcookie. Avec lui, nous formons cookie, que Wapiti utilisera lors du scan. La formation cookie s'effectue Ă l'aide de la commande :
# wapiti-getcookie -u http://sites.vulns.pentestit.ru/login.php -c cookie.jsonPendant le fonctionnement en mode interactif, nous répondons aux questions et fournissons les informations nécessaires telles que : login, mot de passe, etc. :

En sortie, nous obtenons un fichier au format JSON. Une autre option est d'ajouter toutes les informations nécessaires via le paramÚtre -d:
# wapiti-getcookie - http://sites.vulns.pentestit.ru/login.php -c cookie.json -d "username=admin&password=admin&enter=submit"Le résultat sera similaire :

En considĂ©rant la fonctionnalitĂ© principale du scanner, la requĂȘte finale pour le test de l'application web dans notre cas Ă©tait :
# wapiti --level 1 -u http://sites.vulns.pentestit.ru/ -f html -o /tmp/vulns.html -m all --color -Ń cookie.json --scope folder --flush-session -A 'Pentestit Scans' -p http://proxy.office.pentestit.ru:3128oĂč, parmi d'autres paramĂštres :
-f et -o â le format et le chemin pour enregistrer le rapport ;
-m â connexion de tous les modules â non recommandĂ©, car cela affectera le temps de test et la taille du rapport ;
âcolor â permet de surligner les vulnĂ©rabilitĂ©s trouvĂ©es en fonction de leur criticitĂ© selon la version mĂȘme de Wapiti ;
-c â utilisation d'un fichier avec cookie, gĂ©nĂ©rĂ© Ă l'aide de wapiti-getcookie;
âscope â choix de la cible pour l'attaque. En choisissant cette option, dossier chaque URL sera scannĂ©e et attaquĂ©e, en commençant par la base. L'URL de base doit se terminer par un slash (sans le nom du fichier) ;
âflush-session â permet d'effectuer un scan rĂ©pĂ©titif oĂč les rĂ©sultats prĂ©cĂ©dents ne seront pas pris en compte ;
-A â propre User-Agent;
-p â adresse du serveur proxy, si nĂ©cessaire.
Un peu sur le rapport
Le rĂ©sultat du scan est prĂ©sentĂ© sous la forme d'un rapport dĂ©taillĂ© sur toutes les vulnĂ©rabilitĂ©s dĂ©tectĂ©es au format de page HTML, de maniĂšre claire et comprĂ©hensible. Le rapport indiquera les catĂ©gories et le nombre de vulnĂ©rabilitĂ©s trouvĂ©es, leur description, les requĂȘtes, les commandes pour curl et des conseils sur la façon de les corriger. Pour faciliter la navigation, un lien sera ajoutĂ© aux titres des catĂ©gories, en cliquant sur lequel on pourra y accĂ©der :

Un inconvénient majeur du rapport est l'absence d'une carte de l'application web, sans laquelle il ne sera pas possible de savoir si toutes les adresses et paramÚtres ont été analysés. Il existe également un risque de faux positifs. Dans notre cas, le rapport mentionne "fichiers de sauvegarde" et "fichiers potentiellement dangereux". Leur nombre ne correspond pas à la réalité, car il n'y avait pas de tels fichiers sur le serveur :

Il est possible que des modules qui ne fonctionnent pas correctement soient corrigĂ©s avec le temps. On peut aussi considĂ©rer comme un inconvĂ©nient du rapport l'absence de coloration des vulnĂ©rabilitĂ©s trouvĂ©es (en fonction de leur criticitĂ©), ou au moins leur sĂ©paration par catĂ©gories. La seule façon dont nous pouvons indirectement comprendre la criticitĂ© d'une vulnĂ©rabilitĂ© trouvĂ©e est d'appliquer le paramĂštre âcolor lors du scan et alors les vulnĂ©rabilitĂ©s dĂ©tectĂ©es seront colorĂ©es de diffĂ©rentes couleurs :

Mais dans le rapport lui-mĂȘme, une telle coloration n'est pas prĂ©vue.
Vulnérabilités
SQLi
Le scanner a partiellement rĂ©ussi Ă dĂ©tecter les SQLi. Lors de la recherche de vulnĂ©rabilitĂ©s SQL sur des pages oĂč aucune authentification n'est requise, il n'y a pas de problĂšme :

Il n'a pas Ă©tĂ© possible de dĂ©tecter la vulnĂ©rabilitĂ© sur des pages accessibles uniquement aprĂšs authentification, mĂȘme en utilisant des cookie, car probablement aprĂšs une authentification rĂ©ussie, il y aura une "dĂ©connexion de leur session" et cookie deviendront invalides. Si la fonction de dĂ©sauthentification avait Ă©tĂ© rĂ©alisĂ©e sous la forme d'un script distinct, en charge de cette procĂ©dure, elle aurait pu ĂȘtre complĂštement exclue par le paramĂštre -x, empĂȘchant ainsi son activation. Dans le cas contraire, il ne sera pas possible d'exclure son traitement. Ce n'est pas un problĂšme d'un module particulier, mais de l'outil dans son ensemble, mais Ă cause de ce dĂ©tail, plusieurs injections n'ont pas pu ĂȘtre dĂ©tectĂ©es dans la zone protĂ©gĂ©e de la ressource.
XSS
Avec la tùche définie, le scanner a bien réussi et a trouvé toutes les vulnérabilités préparées :

LFI/RFI
Le scanner a trouvé toutes les vulnérabilités intégrées :

Dans l'ensemble, malgrĂ© les faux positifs et les omissions de vulnĂ©rabilitĂ©s, Wapiti, en tant qu'outil gratuit, montre des rĂ©sultats de travail plutĂŽt satisfaisants. Il convient de noter que le scanner est assez puissant, flexible et multifonctionnel, et surtout â gratuit, ce qui justifie son utilisation, aidant les administrateurs et les dĂ©veloppeurs Ă obtenir des informations de base sur l'Ă©tat de la sĂ©curitĂ© de l'application web.
Restez en bonne santé et en sécurité !
Source : habr.com
