Se puoi fare in modo che il browser faccia una richiesta a http://targetaddress.com/whatever
. Il browser eseguirà automaticamente una semplice richiesta HTTP, non una HTTPS in quanto non vi è alcuna risposta memorizzata nella cache per /whatever
, solo per /
.
Questo può essere ottenuto in diversi modi. Un modo è quello di MITM tra il browser e il sito qualsiasi accessibile tramite semplice HTTP e inserire un tag <img>
. Un altro modo è ingannare l'utente per inserire targetaddress.com/whatever
nella barra degli indirizzi tramite social engineering.
Non appena il browser invia una richiesta di testo in chiaro al dominio di destinazione, il MITM ha vinto la partita.
HTTP consente a un client di eseguire azioni su entità . Quale azione viene eseguita dipende dal metodo HTTP specificato nella richiesta . Quale entità l'azione viene eseguita dipende dall'UR specificato nella richiesta.
Diversi URL possono fare riferimento alla stessa entità, ma il browser non lo sa. Quando un browser memorizza nella cache una risposta HTTP, lo fa per un determinato URL .
http://www.target.com/
è un URL . http://target.com/
è un altro. http://www.target.com/whatever
è ancora un altro. Quindi è http://www.target.com/?
.
Ora, supponiamo che ci sia una voce nella cache per http://www.target.com/
in un browser. Ciò implica che ce n'è uno per qualsiasi altro URL sopra elencato? No, non è così.
Quindi, tornando alla domanda, facendo in modo che il browser invii una richiesta di testo normale nel caso in cui un reindirizzamento permanente venga restituito da un'applicazione Web sulla porta HTTP si tratta di creare un URL che non corrisponde a una voce della cache e induce l'utente a visitare questo URL .
Prova questo funziona:
127.0.0.1 - - [13/Apr/2016:10:01:17 +0200] "GET / HTTP/1.1" 301 226 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
127.0.0.1 - - [13/Apr/2016:10:01:35 +0200] "GET / HTTP/1.1" 301 226 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
127.0.0.1 - - [13/Apr/2016:10:02:10 +0200] "GET /whatever HTTP/1.1" 301 234 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
127.0.0.1 - - [13/Apr/2016:10:02:36 +0200] "GET /whatever HTTP/1.1" 301 234 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
127.0.0.1 - - [13/Apr/2016:10:08:16 +0200] "GET / HTTP/1.1" 301 226 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
127.0.0.1 - - [13/Apr/2016:10:08:25 +0200] "GET /? HTTP/1.1" 301 227 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
Sono stato in grado di effettuare sei richieste di testo in chiaro (numero arbitrario) HTTP allo stesso sito Web con lo stesso browser, anche se un reindirizzamento permanente è configurato per tutto. (E no, ho non svuota la cache del browser!)
Altri modi ovvi per aggirare un reindirizzamento permanente includono l'ingannare l'utente nel passaggio alla modalità browser anonima (senza cache) o il passaggio a un altro browser ("Ho problemi con l'accesso all'applicazione con IE. Puoi dare un'occhiata?" ).