Einfacher Website-Scanner für Unterseiten in Python

Jan 26 2023
Hallo an alle! Im heutigen Artikel werde ich darüber sprechen, wie wir eine einfache Version eines Tools erstellen können, das bei Penetrationstests verwendet werden kann, um vorhandene Unterseiten für Websites zu finden. Wie der Titel schon sagt, werde ich Python verwenden, aber das ist nicht zwingend, da es auch in anderen Sprachen möglich ist.

Hallo an alle! Im heutigen Artikel werde ich darüber sprechen, wie wir eine einfache Version eines Tools erstellen können, das bei Penetrationstests verwendet werden kann, um vorhandene Unterseiten für Websites zu finden. Wie der Titel schon sagt, werde ich Python verwenden, aber das ist nicht zwingend, da es auch in anderen Sprachen möglich ist.

● Was macht ein Website-Scanner?

Der Zweck dieser Art von Scanner besteht darin, zu erkennen, ob bestimmte Unterseiten auf einer bestimmten Website vorhanden sind. Falls Sie mit dem Begriff Brute-Force-Angriff auf Passwörter vertraut sind, ist das Prinzip fast dasselbe, nur dass es anstelle von Passwörtern Unterseiten gibt.

Es gibt zwei obligatorische Teile: die Website, auf der der Scan durchgeführt werden muss, und eine Textdatei mit einer Liste möglicher Unterseiten.

● Ein einfaches Beispiel zum besseren Verständnis

Betrachten wir https://www.nicevintagecars.com als unsere Website (hypothetisch, sie existiert nicht). Es ist ganz einfach, mit nur 4 Elementen im Menü: Startseite , Über , Galerie und Kontakt . Wenn jemand die Seite durchstöbert, findet er nur die oben genannten Seiten. Dies bedeutet jedoch nicht automatisch, dass dies die einzigen verfügbaren sind. Manchmal existieren Dinge, auch wenn sie nicht sichtbar sind.

Wir haben eines der beiden notwendigen Elemente, es ist noch eines übrig. Unsere Textdatei könnte aus mehreren möglichen Unterseiten bestehen: Admin , Secret , Luxury , Auction und Owners .

Basierend auf den beiden Komponenten unseres Beispiels testet der Scanner die Existenz der folgenden Links:

▪ 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

Einige von ihnen könnten existieren, andere nicht. Oder vielleicht existiert keines davon. Aber der Scanner kann uns dabei helfen, es herauszufinden.

● Wie finden wir heraus, ob eine Seite existiert?

Sie würden sagen, Sie geben einfach den Link in den Browser ein, drücken die Eingabetaste und prüfen, ob etwas angezeigt wird. Welches ist richtig. Aber es ist keine geeignete Option für unser Programm. Dies ist selbst für Sie keine praktikable Lösung, wenn Ihre Liste 1000 Zeilen lang ist.

Die Geschichte hinter der Prüfung ist folgende: Wenn der Client in seinem Browser auf die Webseite zugreift, sendet er eine Anfrage an den Server, auf dem die Website gehostet wird. In dieser Anfrage wird eine Ressource angefordert. Der Server sendet eine Antwort zurück und anhand des empfangenen Statuscodes wird das Ergebnis ermittelt. Wenn es 200 ist, lädt die Seite einwandfrei (dies ist der häufigste Code). Ein 404-Statuscode bedeutet, dass die Seite nicht gefunden wurde.

Eine Seite kann auf einer Website vorhanden sein, auch wenn der empfangene Statuscode nicht 200 ist. Sie können beispielsweise 401 oder 403 erhalten. Dies bedeutet nicht, dass die Seite nicht gefunden wurde, Sie sind lediglich nicht authentifiziert oder nicht autorisiert.

● Schritte in unserem Algorithmus

Es gibt drei Phasen, die ich für wesentlich halte:

▪ den Input erhalten

Wie es heißt, müssen wir unsere beiden erforderlichen Elemente festlegen, die Webseite und die Liste der Verzeichnisse (oder sogar Dateien, das funktioniert auch in diesem Fall).

▪ Erstellen der vollständigen Liste der zu scannenden URLs

In diesem Schritt nehmen wir für jede Zeile in unserer Textdatei diesen Wert und hängen ihn am Ende der Haupt-URL an, getrennt durch ein „/“-Zeichen. Als nächstes speichern wir den endgültigen Link in einer Listentypvariablen.

▪ Senden von Anfragen für jede URL und Ermitteln ihres Status

Als letzten Schritt nehmen wir die zuvor erstellte Liste und analysieren sie. Für jeden Link senden wir eine Get-Anfrage und überprüfen, ob sein Statuscode 200 ist. Wenn ja, zeigen wir diesen Link einfach als gültig an.

Als ich eine erweiterte Version dieses Tools erstellte, verfolgte ich einen anderen Ansatz. Ich habe die Ergebnisse nicht nach Statuscode 200 gefiltert, sondern nur diejenigen mit 404 ausgeschlossen. Wie ich bereits erwähnt habe, existieren einige Seiten, obwohl der Statuscode nicht 200 ist.

Sie finden diese Version auf meinem GitHub-Profil über den folgenden Link:

● Codierung unseres Programms

Der Code, den ich hier vorstellen werde, ist der grundlegende Code, der mindestens erforderlich ist, damit dieses Tool funktioniert.

Gemäß den zuvor vorgestellten Schritten müssen wir zunächst unseren Input einholen. Ich habe zwei Variablen erstellt, um jedes dieser beiden Elemente zu speichern, aber auch das Modul „Anfragen“ importiert . Wir werden dies später benötigen, wenn wir Get-Anfragen senden. Bedenken Sie, dass es sich hierbei nicht um ein Standard-Python-Modul handelt, Sie müssen es also zuerst installieren.

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!")

Im Video unten können Sie das gesamte Tutorial sehen, in dem ich diesen Scanner erstelle, ihn ausführe und auch die erzielten Ergebnisse überprüfe. Guck mal!

● Haftungsausschluss

Dieser Artikel dient nur zu Bildungszwecken. Die Verwendung des Tools zum Angriff auf Ziele ohne vorherige gegenseitige Zustimmung ist illegal. Ich übernehme keine Haftung und bin nicht verantwortlich für jeglichen Missbrauch oder Schäden, die durch dieses Tool verursacht werden.

Das ist alles für den Moment, ich hoffe, es hat Ihnen gefallen. Vielen Dank für die Zeit, die Sie sich zum Lesen genommen haben! Wir sehen uns in meinem nächsten Artikel!