Mi interfaccio spesso con i concetti di subdomain e virtual host, specialmente quando utilizzo tool di enumerazione come Gobuster in contesti di CTF. Tuttavia, non ho mai veramente capito la differenza tra i due. Da quanto ho capito, sia i subdomain che i virtual host possono utilizzare lo stesso dominio principale, ma non mi è chiaro come differiscano nella pratica.
In particolare, mi confonde il fatto che alcuni tool richiedano di specificare se stai cercando subdomain o virtual host, come se fossero concetti distinti.
Qualcuno potrebbe chiarirmi la differenza tra subdomain e virtual host?
In maniera molto sbrigativa i virtual host sono configurati lato server web e servono per avere piu’ domini/sottodomini in un unico server/ip invece i sottodomini sono lato DNS fa parte del nome di dominio <subdomain>.<SLD>.<TLD> .
quando sei in dubbio su qualcosa, cerca di “tornare indietro”.
Esempio pratico: i due termini che su cui hai dei dubbi si ritrovano nel contesto dei protocolli di rete. I protocolli di rete sono composti da due componenti:
Il formato dei messagi scambiati tra le varie componenti in gioco, quindi proprio la sequenza di bytes 0xADFF2301 etc…
Il modo in cui questi byte sono interpretati e processati
Il dubbio che hai si può risolvere studiando da dove derivano le due parole.
Il concetto di subdomain deriva dal protocollo DNS, ed è una specializzazione di un dominio. L’enumerazione dei subdomain dunque viene effettuata inviando particolari pacchetti DNS e vedendo la risposta. Il subdomain viene effettuato per suddividere un dominio in vari “sotto-domini”, così che abbiamo il top level domain .it che viene poi suddiviso in esadecimale.it, il sottodominio che hosta tutti i server del mio progetto, e abbiamo anche forum.esadecimale.it, un “sotto-sotto-dominio”, che si può chiamare per semplicità sempre sotto-dominio.
Il concetto di virtual host invece è stato introdotto nel protocollo HTTP per permettere di fare hosting di più applicazioni web utilizzando lo stesso endpoint TCP (quindi combinazione IP-porta). Questo significa che per enumerare i virtual host devi inviare particolari messaggi HTTP e leggere le risposte.
In caso di dubbio, quindi, in generale, prova a fare questo esercizio:
Capisci il contesto in cui la parola si muove
A seconda del contesto, provi a capire come la conoscenza in quel contesto è strutturata
Vai a ritrovare informazioni ufficiali rispetto a dove quella parola è utilizzata in quel contesto (per esempio per i protocolli di rete ti leggi gli RFC dei protocolli DNS e HTTP e scopri le differenze tra i termini)
Una volta che fai questo esercizio per tutti i termini in gioco, dovresti capire le somiglianze e le differenze tra i concetti.
La cosa che “confonde” è che sia virtual host che sottodomini hanno la stessa rappresentazione sintattica, ovvero si rappresentano come “forum.esadecimale.it”. Ad esempio quando ti colleghi a questo forum, entra in gioco sia il concetto di sottodominio e sia il concetto di virtual host:
Il sottodominio è utilizzato dal protocolo DNS per risolvere forum.esadecimale.it nell’indirizzo IP su cui gira il forum
Il virtual host è risolto dall’istanza di nginx in ascolto sulla porta 443 del mio host e viene utilizzato per indirizzare le chiamate al docker corretto
Quindi, stessa sintassi, ma diversa semantica, perché la stessa stringa è utilizzata in due modi diversi rispetto a due protocolli diversi.
Questo è anche un ottimo caso che fa vedere la differenza tra sintassi (come scrivo le cose) e semantica (come processo le cose, ovvero lo specifico significato che attribuisco a quei simboli).
P.S. Btw, domanda non banale e interessante, grazie per averla posta!