Souvent les besoins de scanner un site se font dans le cadre d’un pentest . Des outils complets comme Nikto embarquent ce genre de fonctionnalité. Mais l’idée ici est de trouver et de cibler avec un simple script , des répertoires ou des fichiers intéressants appartenant à l’administrateur d’un site web de type login, panneau d’administration etc…
Ainsi pour détecter un dossier phpmyadmin ou des noms de dossier de type « test » ou des dossiers d’installation de CMS qui n’ont pas été supprimés etc…
Aujourd’hui je vous partage un petit script perl assez répandu sur la toile mais que j’ai un peu adapté et que vous pourrez aussi peaufiner en fonction de vos besoins.
le disclaimer
Le programme est à tester uniquement sur un de vos serveurs en LAN ou dans une de vos VM. N’oubliez pas que dans les logs du serveur web testé, c’est votre IP qui apparaitra et qui sera considéré à juste titre comme potentiellement à l’ origine d’une attaque.
Ce partage est uniquement à but pédagogique car ce genre de tests sur serveur en prod ne nous appartenant pas est passible de sanctions au regard de la loi. Le but est ici de vous montrer qu’il peut être assez simple pour une personne malintentionnée de sonder vos dossiers ceux que vous pensiez bien cachés et qu’il faut à minima se prémunir de ce genre de scans nocifs.
le principe du script:
En fait , on va simuler un navigateur comme si vous utilisiez firefox et que vous testiez plusieurs adresses à la suite dans votre barre de recherche.
Le script génère et envoie automatiquement des requêtes http en testant séquentiellement des URL composées :
nom du site + nom d’un dossier ou d’un fichier présent dans une liste.
En fonction du code retour de la réponse de la requête HTTP , le programme vous indique si l’url est « matchée » ou pas et donc si le fichier/dossier existe ou pas.
A vous de jouer
1/ créer la liste (étape facultative)
Cette liste va contenir tous les noms de dossier ou de fichier à faire tester par le script . Je mets un extrait ci-dessous mais si vous n’avez pas du tout d’idées ou la flemme de vous la créer, je mets à disposition en téléchargement le fichier complet « liste.txt » juste après 🙂
phpMyAdmin/ /phpmyadmin/ /PMA/ /admin/ /egroupware/ /dbadmin/ /mysql/ /myadmin/ /wordpress/,wp-content/uploads/ /phpmyadmin2/ /phpMyAdmin2/ /phpMyAdmin-2/ /php-my-admin/ /phpMyAdmin-2.2.3/ /phpMyAdmin-2.2.6/ /phpMyAdmin-2.5.1/ /phpMyAdmin-2.5.4/ /phpMyAdmin-2.5.5-rc1/ /phpMyAdmin-2.5.5-rc2/ /phpMyAdmin-2.5.5/ /phpMyAdmin-2.5.5-pl1/ ....
Supprimer les doublons
Allez c’est cadeau , en une ligne toute la puissance de perl pour supprimer les éventuels doublons créés par mégarde dans votre fichier:
perl -ne 'print if ! $lignes{$_}++' liste.txt > nouvelle_liste.txt
2/ Télécharger le script « scanMySite.pl »
git clone https://gitlab.com/benzoga33/scanMySite.git
cd scanMySite
Au besoin rendre le fichier exécutable:
chmod u+x scanMySite.pl
Exécuter le script comme suit avec en argument la liste :
./scanMysite.pl liste.txt
Améliorations encore possibles
En outre, je stocke les noms dans un fichier texte que je passe en arguments.J’ai rajouté le log de tous les résultats de requêtes et j’ai enrichi aussi la liste des expressions à rechercher.
- Requêter à travers un proxy
- Générer un fichier liste plus exhaustif comme pour les dicos de mot de passe
- Inclure des dossiers de conf des CMS les plus courants, wordpress, joomla, phpBB etc…
Conclusion
Ce simple script de quelques lignes peut permettre de sonder les répertoires intéressants pour un attaquant en phase de reconnaissance.
C’est pourquoi il est très important à l’installation d’un serveur web de modifier les noms de répertoire par défaut comme pour « phpmyadmin » . Une gestion des droits utilisateurs fine est tout autant nécessaire sur ce type de fichiers.
Enfin, ne pas hésiter à restreindre sur l’IP l’accès aux interfaces d’administration et à loguer voir bannir toute tentative de sondage non désirée.(solutions possibles IDS comme fail2ban etc…)
Leave a Reply