
Ein Virtual-Host-Scanner, der Reverse-Lookups durchführt, mit Pivot-Tools verwendet werden kann, Catch-All-Szenarien erkennt, Wildcards, Aliase und dynamische Standardseiten umgeht.
Ein virtueller Host-Scanner, der mit Pivot-Tools verwendet werden kann, Catch-All-Szenarien, Aliase und dynamische Standardseiten erkennt. Erstmals vorgestellt auf SecTalks BNE im September 2017 (Slidedeck).
Dies ist eine verbesserte Version des ursprünglichen VHostScan von Codingo mit zusätzlichen Verbesserungen, modernisierter Codebasis und erweiterten Wortlisten für eine bessere virtuelle Host-Erkennung.
Anschließend die Anwendung ausführen `docker run --rm -it vhostscan -t´
VHostScan benötigt Python 3.8 oder höher. Installation mit:
$ pip install VHostScan
Oder Installation aus dem Quellcode:
$ git clone https://github.com/codingo/VHostScan.git
$ cd VHostScan
$ pip install .
Für die Entwicklung:
$ pip install -e .
Die Abhängigkeiten werden dann installiert und VHostScan wird zu Ihrem Pfad hinzugefügt.
Beachten Sie, dass einige dieser Beispiele auf 10.10.10.29 verweisen. Diese IP bezieht sich auf BANK.HTB, eine ausgemusterte Zielmaschine von HackTheBox (https://www.hackthebox.eu/).
Das einfachste Beispiel führt die Standard-Wortliste gegen example.com unter Verwendung des Standardports 80 aus:
$ VHostScan -t example.com
Wenn Ihre Verbindung SSL erfordert, können Sie Folgendes verwenden:
$ VHostScan -t example.com --ssl

Angenommen, Sie haben eine SSH-Portweiterleitung, die auf Port 4444 lauscht und Datenverkehr an Port 80 auf dem Entwicklungsrechner von example.com weiterleitet. Sie könnten Folgendes verwenden, um VHostScan über Ihren SSH-Tunnel via localhost:4444 zu verbinden, aber die Header-Anfragen so zu formatieren, dass sie einer direkten Verbindung zu Port 80 entsprechen:
$ VHostScan -t localhost -b example.com -p 4444 -r 80
VHostScan unterstützt Piping von anderen Anwendungen und behandelt an VHostScan übergebene Informationen als Wortlistendaten, zum Beispiel:
$ cat bank.htb | VHostScan -t 10.10.10.29

Sie können weiterhin eine Wortliste angeben, die zusammen mit stdin verwendet wird. In diesen Fällen werden die Wortlistendaten an stdin angehängt. Zum Beispiel:
$ echo -e 'a.example.com\b.example.com' | VHostScan -t localhost -w ./wordlists/wordlist.txt
Hier ist ein Beispiel mit aktivierter Fuzzy-Logik. Sie können sehen, dass der letzte Vergleich viel ähnlicher ist als die ersten beiden (es werden die Inhalte verglichen, nicht die tatsächlichen Hashes):
VHostScan enthält nun mehrere spezialisierte Wortlisten für verschiedene Szenarien. Die ursprünglichen Wortlisten wurden von Codingo basierend auf praktischer Penetrationstesterfahrung erstellt, und diese verbesserte Version enthält zusätzliche spezialisierte Wortlisten für moderne Infrastruktur.
Detaillierte Informationen zu jeder Wortliste finden Sie unter WORDLISTS.md.
Verwenden Sie die auf Pentesting fokussierte Wortliste für Sicherheitsbewertungen:
$ VHostScan -t target.com -w ./wordlists/pentest-focused.txt
Kombinieren Sie mehrere Wortlisten für eine umfassende Suche:
$ VHostScan -t target.com -w "./wordlists/common-vhosts.txt,./wordlists/cloud-modern.txt"
Verwenden Sie die cloudfokussierte Wortliste für moderne Infrastruktur:
$ VHostScan -t example.com -w ./wordlists/cloud-modern.txt --ssl
Dieses Projekt enthält eine kleine Reihe von Tests. Die Tests sind wirklich einfach auszuführen:
pip install -r test-requirements.txt
python3 setup.py test
Wenn Sie darüber nachdenken, dem Projekt eine neue Funktion hinzuzufügen, ziehen Sie in Betracht, auch ein paar Tests beizutragen. Eine gut getestete Codebasis ist eine vernünftige Codebasis. :)
Diese erweiterte Version umfasst:
VHostScan wurde ursprünglich von Codingo erstellt und erstmals auf der SecTalks BNE im September 2017 vorgestellt. Diese erweiterte Version baut auf dieser hervorragenden Grundlage auf und bietet zusätzliche Verbesserungen für modernes Penetrationstesting und Bug Bounty Hunting.
| Argument | Beschreibung |
|---|
| -h, --help | Hilfemeldung anzeigen und beenden |
| -t TARGET_HOSTS | Zielhost festlegen. |
| -b BASE_HOST | Host festlegen, der bei der Substitution in der Wortliste verwendet wird (Standard: TARGET). |
| -w WORDLISTS | Die zu verwendende(n) Wortliste(n) festlegen. Sie können mehrere Wortlisten in kommagetrenntem Format angeben (z.B. -w "./wordlists/simple.txt, ./wordlists/hackthebox.txt" (Standard: ./wordlists/virtual-host-scanning.txt). Verfügbare Wortlisten: simple.txt, hackthebox.txt, common-vhosts.txt, pentest-focused.txt, cloud-modern.txt, virtual-host-scanning.txt. |
| -p PORT | Den zu verwendenden Port festlegen (Standard: 80). |
| -r REAL_PORT | Der tatsächliche Port des Webservers, der in Headern verwendet werden soll, wenn nicht 80 (siehe RFC2616 14.23), nützlich beim Pivotieren durch ssh/nc usw. (Standard: PORT). |
| --ignore-http-codes IGNORE_HTTP_CODES | Kommagetrennte Liste von HTTP-Codes, die bei Virtual-Host-Scans ignoriert werden sollen (Standard: 404). |
| --ignore-content-length IGNORE_CONTENT_LENGTH | Content-Length einer bestimmten Größe ignorieren. |
| --prefix PREFIX | Ein Präfix zu jedem Element in der Wortliste hinzufügen, z.B. dev-<word>, test-<word> usw. |
| --suffix SUFFIX | Ein Suffix zu jedem Element in der Wortliste hinzufügen, z.B. <word>dev, <word>dev |
| --first-hit | Erstes erfolgreiches Ergebnis zurückgeben. Nur in Szenarien verwenden, in denen sicher ist, dass kein Catch-All konfiguriert ist (z.B. bei einem CTF). |
| --unique-depth UNIQUE_DEPTH | Wahrscheinliche Übereinstimmungen von Seiteninhalten anzeigen, die x-mal gefunden werden (Standard: 1). |
| --ssl | Wenn gesetzt, werden Verbindungen über HTTPS statt HTTP hergestellt. |
| --fuzzy-logic | Wenn gesetzt, werden alle eindeutigen Inhaltsantworten verglichen und ein Ähnlichkeitsverhältnis für jedes Paar angegeben. Dies hilft, VHosts in Situationen zu isolieren, in denen eine Standardseite nicht statisch ist (z.B. wenn die Uhrzeit darauf angezeigt wird). |
| --no-lookups | Reverse-Lookups deaktivieren (identifiziert neue Ziele und hängt sie an die Wortliste an, standardmäßig aktiviert). |
| --rate-limit | Zeit in Sekunden, die zwischen jedem Scan verzögert werden soll (Standard: 0). |
| --random-agent | Wenn gesetzt, verwendet jeder Scan einen zufälligen User-Agent aus einer vordefinierten Liste. |
| --user-agent | Einen User-Agent für Scans angeben. |
| --waf | Wenn gesetzt, werden einfache WAF-Bypass-Header gesendet. |
| -oN OUTPUT_NORMAL | Normale Ausgabe in eine Datei, wenn die Option -oN mit einem Dateinamen angegeben wird. |
| -oG OUTPUT_GREPABLE | Grep-fähige Ausgabe in eine Datei, wenn -oG mit einem Dateinamen angegeben wird. |
| -oJ OUTPUT_JSON | JSON-Ausgabe in eine Datei, wenn die Option -oJ mit einem Dateinamen angegeben wird. |
| -v VERBOSE | Erhöht die Ausgabe des Tools, um den Fortschritt anzuzeigen |