
Un scanner d'hôtes virtuels qui effectue des recherches inverses, peut être utilisé avec des outils de pivot, détecte les scénarios 'catch-all', contourne les wildcards, les alias et les pages par défaut dynamiques.
Un scanner d'hôtes virtuels pouvant être utilisé avec des outils de pivotement, pour détecter les scénarios de type « catch-all », les alias et les pages par défaut dynamiques. Présenté pour la première fois à SecTalks BNE en septembre 2017 (diaporama).
Il s’agit d’une version améliorée du VHostScan original de Codingo avec des améliorations supplémentaires, une base de code modernisée et des listes de mots étendues pour une meilleure découverte des hôtes virtuels.
Puis exécutez l'application `docker run --rm -it vhostscan -t´
VHostScan nécessite Python 3.8 ou supérieur. Installez-le à l'aide de :
$ pip install VHostScan
Ou installez-le depuis les sources :
$ git clone https://github.com/codingo/VHostScan.git
$ cd VHostScan
$ pip install .
Pour le développement :
$ pip install -e .
Les dépendances seront alors installées et VHostScan sera ajouté à votre chemin.
Notez que plusieurs de ces exemples font référence à 10.10.10.29. Cette IP correspond à BANK.HTB, une machine cible retirée de HackTheBox (https://www.hackthebox.eu/).
L'exemple le plus simple exécute la liste de mots par défaut contre example.com en utilisant le port 80 par défaut :
$ VHostScan -t example.com
Si votre connexion nécessite SSL, vous pouvez utiliser :
$ VHostScan -t example.com --ssl

Supposons que vous ayez une redirection de port SSH écoutant sur le port 4444 et redirigeant le trafic vers le port 80 de la machine de développement d'example.com. Vous pouvez utiliser la commande suivante pour que VHostScan se connecte via votre tunnel SSH sur localhost:4444 tout en formatant les en-têtes de requête comme si la connexion se faisait directement sur le port 80 :
$ VHostScan -t localhost -b example.com -p 4444 -r 80
VHostScan prend en charge le pipe depuis d'autres applications et traitera les informations qui lui sont transmises comme des données de liste de mots, par exemple :
$ cat bank.htb | VHostScan -t 10.10.10.29

Vous pouvez également spécifier une liste de mots à utiliser en complément de STDIN. Dans ce cas, les informations de la liste de mots seront ajoutées à STDIN. Par exemple :
$ echo -e 'a.example.com\b.example.com' | VHostScan -t localhost -w ./wordlists/wordlist.txt
Voici un exemple avec la logique floue activée. Vous pouvez voir que la dernière comparaison est beaucoup plus similaire que les deux premières (elle compare le contenu, pas les hachages réels) :
VHostScan inclut désormais plusieurs listes de mots spécialisées pour différents scénarios. Les listes originales ont été créées par Codingo basées sur une expérience réelle de tests d'intrusion, et cette version améliorée inclut des listes spécialisées supplémentaires pour l'infrastructure moderne.
Pour des informations détaillées sur chaque liste, voir WORDLISTS.md.
Utilisez la liste pentest-focused pour les évaluations de sécurité :
$ VHostScan -t target.com -w ./wordlists/pentest-focused.txt
Combinez plusieurs listes pour une analyse complète :
$ VHostScan -t target.com -w "./wordlists/common-vhosts.txt,./wordlists/cloud-modern.txt"
Utilisez la liste cloud-focused pour l'infrastructure moderne :
$ VHostScan -t example.com -w ./wordlists/cloud-modern.txt --ssl
Ce projet comprend une petite batterie de tests. Il est très simple de les exécuter :
pip install -r test-requirements.txt
python3 setup.py test
Si vous envisagez d'ajouter une nouvelle fonctionnalité au projet, pensez également à contribuer avec quelques tests. Une base de code bien testée est une base de code saine. :)
Cette version améliorée inclut :
VHostScan a été créé à l'origine par Codingo et présenté pour la première fois à SecTalks BNE en septembre 2017. Cette version améliorée s'appuie sur cette excellente base avec des améliorations supplémentaires pour les tests d'intrusion modernes et la chasse aux bugs.
| Argument | Description |
|---|
| -h, --help | Affiche le message d'aide et quitte |
| -t TARGET_HOSTS | Définit l'hôte cible. |
| -b BASE_HOST | Définit l'hôte à utiliser lors de la substitution dans la liste de mots (par défaut TARGET). |
| -w WORDLISTS | Définit la ou les listes de mots à utiliser. Vous pouvez spécifier plusieurs listes séparées par des virgules (ex. -w "./wordlists/simple.txt, ./wordlists/hackthebox.txt") (par défaut ./wordlists/virtual-host-scanning.txt). Listes disponibles : simple.txt, hackthebox.txt, common-vhosts.txt, pentest-focused.txt, cloud-modern.txt, virtual-host-scanning.txt. |
| -p PORT | Définit le port à utiliser (par défaut 80). |
| -r REAL_PORT | Le port réel du serveur web à utiliser dans les en-têtes lorsqu'il n'est pas 80 (voir RFC2616 14.23), utile lors d'un pivot via SSH/NC etc. (par défaut PORT). |
| --ignore-http-codes IGNORE_HTTP_CODES | Liste séparée par des virgules des codes HTTP à ignorer lors des scans d'hôtes virtuels (par défaut 404). |
| --ignore-content-length IGNORE_CONTENT_LENGTH | Ignore les longueurs de contenu d'un montant spécifié. |
| --prefix PREFIX | Ajoute un préfixe à chaque élément de la liste de mots, par exemple dev-<word>, test-<word> etc. |
| --suffix SUFFIX | Ajoute un suffixe à chaque élément de la liste de mots, par exemple <word>dev, <word>dev |
| --first-hit | Renvoie le premier résultat réussi. À utiliser uniquement dans les scénarios où vous êtes sûr qu'aucun catch-all n'est configuré (comme un CTF). |
| --unique-depth UNIQUE_DEPTH | Affiche les correspondances probables du contenu de la page trouvé x fois (par défaut 1). |
| --ssl | Si défini, les connexions seront effectuées en HTTPS au lieu de HTTP. |
| --fuzzy-logic | Si défini, toutes les réponses de contenu unique sont comparées et un ratio de similarité est donné pour chaque paire. Cela permet d'isoler les vhosts dans des situations où une page par défaut n'est pas statique (comme afficher l'heure). |
| --no-lookups | Désactive les recherches inversées (identifie de nouvelles cibles et les ajoute à la liste de mots, activé par défaut). |
| --rate-limit | Temps en secondes à attendre entre chaque scan (par défaut 0). |
| --random-agent | Si défini, chaque scan utilisera un user-agent aléatoire provenant d'une liste prédéfinie. |
| --user-agent | Spécifie un user-agent à utiliser pour les scans. |
| --waf | Si défini, des en-têtes simples de contournement WAF seront envoyés. |
| -oN OUTPUT_NORMAL | Sortie normale imprimée dans un fichier lorsque l'option -oN est spécifiée avec un argument de nom de fichier. |
| -oG OUTPUT_GREPABLE | Sortie greppable imprimée dans un fichier lorsque l'option -oG est spécifiée avec un argument de nom de fichier. |
| -oJ OUTPUT_JSON | Sortie JSON imprimée dans un fichier lorsque l'option -oJ est spécifiée avec un argument de nom de fichier. |
| -v VERBOSE | Augmente la sortie de l'outil pour afficher la progression |