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

(4 votos)

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á!

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿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- - https://www.raulprietofernandez.net/prueba_wget.html
---request begin---
GET /prueba_wget.html HTTP/1.1
User-Agent: Wget/1.16 (linux-gnu)
Accept: */*
Host: https://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 https://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" https://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 algunas webs de Internet donde solo dejan 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/enlace 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 una "mosca" encima de la imagen que usan como protección:

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.hispawebcams.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.hispawebcams.com/cams/000004/urls_allowed.json

Si intentamos descargar la imagen con Wget: https://www.hispawebcams.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.hispawebcams.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 ponen algunos servidores se salta en 1 minuto ;)

5.- +INFO

El uso que hagáis de estas herramientas queda bajo vuestra total responsabilidad.

 

 

ENJOY!


Acerca de Mi

RPF

Soy Ingeniero Téc. Industrial Mecánico, Administrador de Sistemas Informáticos, Desarrollador de Aplicaciones Informaticas Web, Técnico Superior en PRL, Experto en Energías Renovables... y trabajo actualmente como Senior DevOPS en HP SCDS.

Contactar conmigo

Dirección: León, España

E-Mail: Contactar

Web: https://www.raulprietofernandez.net

Skype: raul.lnx

APÚNTATE GRATIS

VIP RPF
Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más... ¡Muy Pronto!