Si puede hacer que el navegador realice una solicitud a http://targetaddress.com/whatever
. El navegador realizará de forma predeterminada una solicitud HTTP simple, no una HTTPS ya que no hay respuesta en caché para /whatever
, solo para /
.
Esto se puede lograr de varias maneras. Una forma es MITM entre el navegador y cualquier sitio web accesible a través de HTTP simple e insertar una etiqueta <img>
. Otra forma es engañar al usuario para que ingrese targetaddress.com/whatever
en la barra de direcciones a través de la ingeniería social.
Tan pronto como el navegador realiza una solicitud de texto claro al dominio de destino, el MITM ha ganado el juego.
HTTP permite a un cliente realizar acciones en entidades . La acción que se realice depende del método HTTP especificado en la solicitud . La entidad en la que se realiza la acción depende de la URL especificada en la solicitud.
Diferentes URL s pueden hacer referencia a la misma entidad, pero el navegador no lo sabe. Cuando un navegador almacena en caché una respuesta de HTTP, lo hace para una URL .
http://www.target.com/
es una URL . http://target.com/
es otro. http://www.target.com/whatever
es otro más. Así es http://www.target.com/?
.
Ahora, supongamos que hay una entrada en caché para http://www.target.com/
en un navegador. ¿Implica que hay uno para cualquiera de los otros URL listados arriba? No, no lo hace.
Por lo tanto, volviendo a la pregunta, hacer que el navegador envíe una solicitud de texto sin formato en el caso de que una aplicación web devuelva un redireccionamiento permanente en el puerto HTTP es una cuestión de crear una URL que no coincide con una entrada de caché y engañar al usuario para que visite esta URL .
Prueba de que esto funciona:
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"
He podido hacer seis solicitudes HTTP de texto claro (número arbitrario) al mismo sitio web con el mismo navegador, aunque se haya configurado una redirección permanente para todo. (Y no, ¡ no borramos el caché del navegador!)
Otras formas obvias de evitar un redireccionamiento permanente incluyen engañar al usuario para que cambie al modo de navegador anónimo (sin caché) o al otro navegador ("Tengo problemas al acceder a la aplicación con IE. ¿Puede echar un vistazo?" ).