Differenza tra subdomain e virtual host

Ciao a tutti,

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?

-Gio

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> .

1 Like

Ciao,

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!

3 Likes

Ecco appunto quello che avevo detto io :crazy_face: !!!