• Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Mi Blog
☢ Cómo personalizar las cabeceras HTTP con Wget y ejemplo de hack

☢ Cómo personalizar las cabeceras HTTP con Wget y ejemplo de hack

Wget es la herramienta -de línea de comandos- más popular para descargar contenido desde un servidor HTTP, HTTPS y/ó FTP. Cuando utilizamos Wget, envía una serie de datos en la cabecera de los paquetes TCP al servidor que podemos cambiar a nuestro gusto y según nuestras necesidades. Existe versiones tanto para Windows, GNU/Linux y MAC Os.

Si quieres aprender como hacerlo, no lo dudes y sigue leyendo este sencillo tutorial, ¡te gustará!

¿QUÉ ES WGET?

GNU Wget es una herramienta libre que permite la descarga de contenidos desde servidores web de una forma simple. Su nombre deriva de World Wide Web (w), y de «obtener» (en inglés get), esto quiere decir: obtener desde la WWW. Fue escrito originalmente por Hrvoje Nikšić y por ser un proyecto de software libre tiene una gran cantidad de colaboradores directos e indirectos.

Actualmente soporta descargas mediante los protocolos HTTP, HTTPS y FTP. Entre las características más destacadas que ofrece Wget está la posibilidad de fácil descarga de mirrors (espejos) complejos de forma recursiva, conversión de enlaces para la visualización de contenidos HTML localmente, soporte para proxies, etc...

1.- REQUERIMIENTOS

Los únicos requerimientos para seguir este tutorial son los siguientes:

  • PC con Windows, GNU/Linux ó MacOS
  • Wget
  • Conexión a Internet (opcional, pero recomendado para descargar Wget)

2.- REALIZAR UNA REQUEST NORMAL CON WGET

Cuando lanzamos una petición de descarga con Wget, por defecto se envían una serie de datos en el Header con una información básica. Si queremos ver dicha información, debemos usar el flag "-d" y si no queremos que descargue el contenido, podemos usar el flag "--spider" ó enviar la salida al stdout con "-O- -". En el siguiente ejemplo se puede ver el comando a utilizar con una URL de ejemplo:

raul@localhost:~$ wget -d -O- - http://www.raulprietofernandez.net/prueba_wget.html
---request begin---
GET /prueba_wget.html HTTP/1.1
User-Agent: Wget/1.16 (linux-gnu)
Accept: */*
Host: http://www.raulprietofernandez.net
Connection: Keep-Alive
---request end---

En las trazas anteriores, podemos ver el GET que estamos haciendo al servidor (si usamos la opción de spider, sería un HEAD en lugar de GET), en este caso la página "prueba_wget.html", el User-Agent que estamos usando (Wget/1.16 (linux-gnu)) el host http://www.raulprietofernandez.net y otros datos adicionales. En algunas ocasiones, querremos cambiar el User-Agent ó el Referrer porque los servidores remotos bloquean peticiones en función del software utilizado. En otras ocasiones, nos interesará forzar el campo host para hacer pruebas con VirtualHosts.

Wget nos permite personalizar estos campos dentro de la cabecera HTTP. Para ello, es necesario usar la opción "--header" junto con el campo que queremos personalizar. En el siguiente apartado se verá un ejemplo de como personalizar dichos campos.

3.- CAMBIAR EL HEADER

Para cambiar el header, debemos usar la opción "--header" y el correspondiente campo a cambiar. Por ejemplo en el siguiente ejemplo se puede ver como cambiamos el User-Agent, el Referer y Accept-Encoding a Yes:

raul@localhost:~$ wget -d -O- - --header="User-Agent: My Browser 1.0" --header="Referer: https://nasa.gov/" --header="Accept-Encoding: compress, gzip" http://www.raulprietofernandez.net/prueba_wget.html 

En las trazas de wget (al estar en modo debug con -d) podemos ver lo siguiente:

---request begin---
GET /prueba_wget.html HTTP/1.1
User-Agent: My Browser 1.0
Accept: */*
Host: www.raulprietofernandez.net
Connection: Keep-Alive
Referer: https://nasa.gov/
Accept-Encoding: compress, gzip

Y en las trazas del servidor Apache la siguiente traza:

227.200.12.11 - - [18/Jan/2018:10:53:17 +0100] "GET /prueba_wget.html HTTP/1.1" 200 - www.raulprietofernandez.net "https://nasa.gov/" "My Browser 1.0" "-"

4.- ¿Y TODO ESTO, PARA QUÉ SIRVE? EJEMPLO REAL

Algunos servicios y páginas de internet, solo dejan acceder a ellos directamente si el "Referrer" desde el que les llega la petición está dentro de una White List con los correspondientes permisos.

Y os preguntaréis, ¿para que puede servirme esto en el día a día?

Para ello, vamos a ver un ejemplo real. Utilizaremos la web de www.hispacams.com la cual solo deja acceder (descargar) las imágenes de sus Webcams, si las peticiones llegan desde una lista de dominios en una White List (algo muy inseguro pero suficiente para impedir que un usuario no avanzado robe/enlaze las imágenes) que ellos tienen definidos. En definitiva, lo que queremos hacer es descargar las imágenes de sus webcams.

¡Manos a la obra!

La página página/imagen que queremos descargar es una de las webcams de Fuentes de Invierno. La URL Oficial de Fuentes de Invierno es la siguiente: http://www.fuentesdeinvierno.com. Las webcams están alojadas en la página: http://fuentesdeinvierno.com/index.php?option=com_content&view=article&id=146&Itemid=116&lang=es

Wget Cabeceras Hack

Página Web Oficial de Fuentes de Invierno

Si hacemos click con el botón derecho "Guardar imagen como" ó "Copiar link de la imagen", veremos que la imagen que nos guarda es un a"mosca" encima de la imagen que usan como protección:

Link: https://www.hispacams.com/cams/000004/mosca_bordes.png

Y la imagen en cuestión que podremos bajar será la siguiente:

Wget Cabeceras Hack

Mosca Fuentes de Invierno

Si pinchamos encima de la imagen, y con el botón derecho le decimos "Abrir Frame en nueva Pestaña", veremos que se nos abre la siguiente URL: https://www.hispacams.com/cam_embedded.php?id=000004

Wget Cabeceras Hack

Iframe

Si intentamos usar las herramientas de desarrollo de Firefox/Chrome "Tools->Page Info" de Firefox, veremos que la imagen realmente es un fichero "php".

Wget Cabeceras Hack

Imagen no accesible

Si visualizamos el código de la página anterior (botón derecho ver código fuente), veremos al final una parte del código con las siguientes líneas:

var URLs_file = './cams/000004/urls_allowed.json?t=' + param;
var caminfo_file = './cams/000004/caminfo.json?t=' + param;

Si componemos la URL completa, veremos desde que Hosts está permitido el acceso directo a las imágenes de las Webcams: http://www.hispacams.com/cams/000004/urls_allowed.json

Si intentamos descargar la imagen con Wget: https://www.hispacams.com/cams/000004/get_imagen.php?f=1516271809040, obtendremos un mensaje de error, pero si la descargamos con Wget cambiando el Header, concretamente ponemos como referrer una de las URLS que tienen en la White List, veremos que la imagen se puede descargar sin problemas.

wget --header="Referer: www.fuentesdeinvierno.com" https://www.hispacams.com/cams/000004/get_imagen.php?f=1516272127592 -O fuentes.jpg

Wget Cabeceras Hack

Imagen descargada

Este es un ejemplo real de "para que pueden servirnos cambiar los HTTP Headers". Y como se ha podido comprobar, esta protección que pone Hispacams se salta en 1 minuto ;)

ENJOY!


Raúl Prieto Fernández

Sitio Web: /

Si quieres ir rápido, ve solo. Si quieres llegar lejos, ve acompañado.

Escribir un comentario

Información básica sobre Protección de Datos

Responsable: Raúl Prieto Fernández +info

Finalidad: Moderar los comentarios a los artículos publicados en el blog. +info

Legitimación: Consentimiento del interesado +info

Destinatarios: No se comunicarán datos a persona u organización alguna. +info +info

Derechos: Tiene derecho a Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la información adicional. +info

Plazo de conservación de los datos: Hasta que no se solicite su supresión por el interesado.

Información adicional: Puede consultar la información adicional y detallada sobre Protección de Datos Personales en mi página web raulprietofernandez.net +info

Código de seguridad
Refescar


LOGIN / ENTRAR

BUSCAR EN EL BLOG

TWITTER TIMELINE

Booking.com

ENCUESTA

¿Cual es el mejor Sistema Operativo?

Como es lógico, esta web utiliza cookies propias y de terceros para elaborar información estadística y mostrar publicidad personalizada a través del análisis de tu navegación, conforme a la política de cookies.

  Si continúas navegando, aceptas su uso.