Scanner de site Web de base pour les sous-pages en Python

Jan 26 2023
Bonjour à tous! Dans l'article d'aujourd'hui, je vais parler de la façon dont nous pouvons créer une version simple d'un outil qui peut être utilisé dans les tests d'intrusion pour trouver des sous-pages existantes pour les sites Web. Comme le titre l'indique, j'utiliserai Python, mais ce n'est pas obligatoire, car cela peut également être fait dans d'autres langages.

Bonjour à tous! Dans l'article d'aujourd'hui, je vais parler de la façon dont nous pouvons créer une version simple d'un outil qui peut être utilisé dans les tests d'intrusion pour trouver des sous-pages existantes pour les sites Web. Comme le titre l'indique, j'utiliserai Python, mais ce n'est pas obligatoire, car cela peut également être fait dans d'autres langages.

● Que fait un scanner de site Web ?

Le but de ce type de scanner est de détecter si des sous-pages spécifiques existent sur un certain site Web. Si vous connaissez le terme d'attaque par force brute pour les mots de passe, le principe est presque le même, juste qu'au lieu de mots de passe, vous avez des sous-pages.

Il y a 2 pièces obligatoires : le site Web où l'analyse doit être effectuée et un fichier texte contenant une liste de sous-pages possibles.

● Un exemple simple pour mieux comprendre

Considérons https://www.nicevintagecars.com comme notre site (hypothétique, il n'existe pas). C'est assez simple, avec seulement 4 éléments dans le menu : Accueil , À propos , Galerie et Contact . Si quelqu'un navigue sur le site, il ne trouvera que les pages mentionnées ci-dessus. Cependant, cela ne signifie pas automatiquement que ce sont les seuls disponibles. Parfois, les choses existent, même si elles ne sont pas visibles.

On a un des 2 éléments nécessaires, il en reste un autre. Notre fichier texte peut être composé de quelques sous-pages possibles : admin , secret , luxury , auction et holders .

Sur la base des 2 composants de notre exemple, le scanner va tester l'existence des liens suivants :

▪ https://www.nicevintagecars.com/admin
▪ https://www.nicevintagecars.com/secret
▪ https://www.nicevintagecars.com/luxury
▪ https://www.nicevintagecars.com/auction
▪ https ://www.nicevintagecars.com/owners

Certains d'entre eux peuvent exister, d'autres non. Ou peut-être qu'aucun de ceux-ci n'existe. Mais le scanner peut nous aider à découvrir.

● Comment savoir si une page existe ?

Vous diriez que vous tapez simplement le lien dans le navigateur, appuyez sur <Entrée> et voyez si quelque chose apparaît. Qui est correct. Mais ce n'est pas une option appropriée pour notre programme. Ce n'est pas une solution réalisable même pour vous, au cas où votre liste compterait 1000 lignes.

L'histoire derrière la vérification est la suivante : lorsque le client accède à la page Web dans son navigateur, il envoie une requête au serveur sur lequel le site Web est hébergé. Dans cette demande, il demande une ressource. Le serveur renvoie une réponse et, sur la base du code d'état reçu, le résultat est déterminé. Si c'est 200, la page se charge correctement (c'est le code le plus courant). Un code d'état 404 implique de ne pas trouver la page.

Une page peut exister sur un site Web, même si le code d'état reçu n'est pas 200. Par exemple, vous pouvez obtenir 401 ou 403. Cela ne signifie pas que la page n'a pas été trouvée, vous n'êtes simplement pas authentifié ou non autorisé.

● Étapes de notre algorithme

Il y a 3 phases que je considère comme essentielles :

▪ obtenir l'entrée

Comme il est dit, nous devons définir nos 2 éléments requis, la page Web et la liste des répertoires (ou même des fichiers, cela fonctionne également dans ce cas).

▪ création de la liste complète des URL à scanner

Dans cette étape, pour chaque ligne de notre fichier texte, nous prendrons cette valeur et l'ajouterons à la fin de l'URL principale, en les séparant par un caractère "/". Ensuite, nous allons stocker le lien final dans une variable de type liste.

▪ envoyer des requêtes pour chaque URL et déterminer son statut

Dans une dernière étape, nous allons prendre la liste précédemment créée et l'analyser. Pour chaque lien, nous enverrons une requête get et vérifierons si son code d'état est 200. Si c'est le cas, nous montrerons simplement ce lien comme étant valide.

J'ai eu une approche différente lorsque j'ai créé une version avancée de cet outil. Je n'ai pas filtré les résultats par code d'état 200, j'ai juste exclu ceux avec 404. Comme je l'ai dit précédemment, certaines pages existent même si le code d'état n'est pas 200.

Vous pouvez trouver cette version sur mon profil GitHub, en utilisant le lien ci-dessous :

● Coder notre programme

Le code que je vais présenter ici est celui de base, le minimum nécessaire pour que cet outil fonctionne.

Selon les étapes présentées précédemment, la première chose à faire est d'obtenir notre contribution. J'ai créé 2 variables pour stocker chacun de ces 2 éléments, mais aussi un module de requêtes importées . Nous en aurons besoin plus tard lorsque nous enverrons des requêtes get. Tenez compte du fait qu'il ne s'agit pas d'un module Python par défaut, vous devez donc l'installer en premier.

import requests

# Define variables

main_url = "https://www.nicevintagecars.com"
wordlist = "directories.txt" # Directories must be each on a different row

# Create list of URLs to scan

full_url_list = []
dirs = open(wordlist, 'r')
for directory in dir:
    url = main_url + "/" + directory.strip()
    full_url_list.append(url)

# Send get requests to URLs

print("Scan started...\n")

for url in full_url_list:
    url_request = requests.get(url)
    if url_request.status_code == 200:
        print("Found:", url)

print("\nScan finished!")

Dans la vidéo ci-dessous, vous pouvez voir l'intégralité du didacticiel où je crée ce scanner, l'exécute et vérifie également les résultats que j'ai obtenus. Regarde!

● Clause de non-responsabilité

Cet article est uniquement à des fins éducatives. L'utilisation de l'outil pour attaquer des cibles sans consentement mutuel préalable est illégale. Je n'assume aucune responsabilité et je ne suis pas responsable de toute mauvaise utilisation ou dommage causé par cet outil.

C'est tout pour le moment, j'espère que ça vous a plu. Merci d'avoir pris le temps de lire ceci ! Rendez-vous à mon prochain article !