Zamora|León|Oviedo, España

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

 

Como se pude ver, la petición parece que viene desde la web https://nasa.gov y usando el navegador "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.

  

uiserver):u78190914:~$ 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: http://www.raulprietofernandez.net

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

Escribir un comentario

Código de seguridad
Refescar

+ Enlaces de interés...

Acerca de mi

Soy Ingeniero Téc. Industrial Mecánico y Administrador de Sistemas Informáticos.

Contactar conmigo

Dirección: León, España
E-Mail: Contactar
Web: https://www.raulprietofernandez.net
Skype: raul.lnx



Follow Me - Instagram

Apúntate Gratis

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

¡Muy Pronto!