Virtual Hosts
Les Virtual Hosts (ou hôtes virtuels) permettent à un serveur web (comme Apache, Nginx ou IIS) d'héberger plusieurs sites web ou applications différentes sur une même machine. Ils sont essentiels pour servir plusieurs contenus depuis une seule adresse IP.
🧠 Comprendre le Fonctionnement des Virtual Hosts
Un serveur web utilise l'en-tête HTTP Host
pour déterminer quel site web servir. Cela permet à plusieurs noms de domaine ou sous-domaines de pointer vers la même adresse IP, tout en desservant des contenus différents.
🔁 Subdomains vs Virtual Hosts
Sous-domaines : Extensions du domaine principal (ex.
blog.example.com
). Ils disposent de leurs propres enregistrements DNS.Virtual Hosts (VHosts) : Configurations internes du serveur web pour servir plusieurs sites différents depuis une même adresse IP.
⚠️ Il est possible d'accéder à un Virtual Host même sans enregistrement DNS en modifiant localement le fichier
hosts
.
Exemple de configuration Apache :
<VirtualHost *:80>
ServerName www.example1.com
DocumentRoot /var/www/example1
</VirtualHost>
<VirtualHost *:80>
ServerName www.example2.org
DocumentRoot /var/www/example2
</VirtualHost>
Chaque bloc gère un site différent selon la valeur de l'en-tête Host
.
🧭 Comment le Serveur Web Choisit le Bon Site ?
Le navigateur envoie une requête HTTP avec le nom de domaine dans l'en-tête
Host
Le serveur web consulte sa configuration de Virtual Hosts
Il associe la requête à la bonne racine de fichiers (DocumentRoot)
Il sert les fichiers correspondants
L'en-tête
Host
agit comme un interrupteur qui oriente le serveur vers le bon contenu.
🧱 Types de Virtual Hosting
Name-based
Le plus courant. Utilise l'en-tête Host
. Un seul IP requis.
IP-based
Chaque site utilise une adresse IP différente. Idéal pour l'isolation.
Port-based
Chaque site répond sur un port différent (ex. :80, :8080). Peu usuel.
🕵️ Découverte de Virtual Hosts
Les VHosts peuvent être publics ou cachés. Leur découverte peut être cruciale pour l'analyse de surface d'attaque.
🔧 Outils utilisés :
gobuster
Brute force d’hôtes virtuels via en-tête Host
feroxbuster
Fuzzer rapide écrit en Rust
ffuf
Fuzzer web flexible capable de tester les VHosts
🧪 Gobuster pour la Découverte de VHosts
Gobuster peut tester des milliers de noms en les injectant dans l'en-tête Host
, et repérer ceux qui retournent une réponse différente.
Exemple :
0xH4shDumb@htb[/htb]$ gobuster vhost -u http://inlanefreight.htb:81 \
-w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt \
--append-domain
Paramètres utiles :
-u
: URL cible (avec IP ou domaine)-w
: Wordlist (ex : SecLists)--append-domain
: Ajoute le domaine principal aux mots du wordlist-t
: Nombre de threads (pour accélérer)-k
: Ignore les erreurs de certificat-o
: Sauvegarde la sortie dans un fichier
Exemple de sortie :
Found: forum.inlanefreight.htb:81 Status: 200 [Size: 100]
🕵️♂️ Attention à la détection
La brute-force des VHosts peut générer du trafic important et être détectée par des IDS/WAF. il est nécessaire d'avoir l’autorisation avant de lancer ce type de tests.
📄 Conclusion
Les Virtual Hosts sont une fonctionnalité puissante mais souvent négligée dans les phases de reconnaissance web. Leur découverte peut révéler des portails cachés, des environnements de test ou des applications sensibles. Maîtriser leur fonctionnement et leur exploration permet d’élargir significativement la surface d’analyse durant un pentest.
Brute-force vhosts on the target system. What is the full subdomain that is prefixed with "web"? Answer using the full domain, e.g. "x.inlanefreight.htb"
Modifier le fichier /etc/hosts en y ajoutant cette ligne :
83.136.255.113 inlanefreight.htb
Une fois le fichier modifié, nous pouvons utiliser gobuster :
$ gobuster vhost -u http://inlanefreight.htb:51426 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -t 50 --append-domain
===============================================================
Starting gobuster in VHOST enumeration mode
===============================================================
Found: admin.inlanefreight.htb:51426 Status: 200 [Size: 100]
Found: blog.inlanefreight.htb:51426 Status: 200 [Size: 98]
Found: forum.inlanefreight.htb:51426 Status: 200 [Size: 100]
Found: support.inlanefreight.htb:51426 Status: 200 [Size: 104]
Found: vm5.inlanefreight.htb:51426 Status: 200 [Size: 96]
Found: browse.inlanefreight.htb:51426 Status: 200 [Size: 102]
Found: web17611.inlanefreight.htb:51426 Status: 200 [Size: 106]
===============================================================
Finished
===============================================================
Le nom du sous-domaine complet, associé au préfix "web" est : web17611.inlanefreight.htb
.
Brute-force vhosts on the target system. What is the full subdomain that is prefixed with "vm"? Answer using the full domain, e.g. "x.inlanefreight.htb"
Nous pouvons, à l'aide du scan de la première question, répondre à celle-ci.
Le nom du sous-domaine complet, associé au préfix "vm" est : vm5.inlanefreight.htb
.
Brute-force vhosts on the target system. What is the full subdomain that is prefixed with "br"? Answer using the full domain, e.g. "x.inlanefreight.htb"
Nous pouvons, à l'aide du scan de la première question, répondre à celle-ci.
Le nom du sous-domaine complet, associé au préfix "br" est : browse.inlanefreight.htb
.
Brute-force vhosts on the target system. What is the full subdomain that is prefixed with "a"? Answer using the full domain, e.g. "x.inlanefreight.htb"
Nous pouvons, à l'aide du scan de la première question, répondre à celle-ci.
Le nom du sous-domaine complet, associé au préfix "a" est : admin.inlanefreight.htb
.
Brute-force vhosts on the target system. What is the full subdomain that is prefixed with "su"? Answer using the full domain, e.g. "x.inlanefreight.htb"
Nous pouvons, à l'aide du scan de la première question, répondre à celle-ci.
Le nom du sous-domaine complet, associé au préfix "su" est : support.inlanefreight.htb
.
Mis à jour