Cómo analizar un enlace para descubrir el enlace real

13

A veces, cuando descargo algo, encuentro que los enlaces no son los directos a los archivos.

Por ejemplo, este es un enlace para descargar un archivo PDF:

http://ishare.down.sina.com.cn/15181391.PDF?ssig=2jEFaNQs7K&Expires=1312905600&KID=sina,ishare&IP=1312761745,68.50.222.

Me preguntaba cómo averiguar / piratear el enlace real (es decir, http: //*.PDF) al archivo?

¿Cuáles son los nombres de tales y similares técnicas de no mostrar enlaces directos? Algunas referencias, como Wikipedia, ...?

Tim
fuente
1
Se corrigió tu enlace. Haga clic editpara ver la fuente de rebajas de cómo lo hice.
Joel Coehoorn

Respuestas:

3

Si a veces .

Hay dos cosas que suceden comúnmente. Su enlace ya no funciona, por lo que no estoy seguro del escenario real en este caso, por lo que resumiré en otro enlace.

Redirección HTTP

Esto es lo que ves con Bit.lyotros servicios. Lo que debe hacer es proporcionar una respuesta de redireccionamiento HTTP. Cuando visita http://bit.ly/oH3410 , redirige a la URL real. A veces una URL redirige a otra. Puede ver que esto sucede si conecta la URL en http://web-sniffer.net/ o si usa [curl][1] -I http://bit.ly/oH3410, verá un 301 que apunta a una nueva ubicación.

Entonces, para lidiar con la redirección de HTTP, solo necesita hacer un bucle de una solicitud de HEAD de HTTP hasta que deje de recibir respuestas en los 300 (con suerte obteniendo un 200). Tenga en cuenta que es posible que se redirijan en un bucle, que nunca terminará. Puede hacer esto con CURL o cualquier herramienta HTTP.

Página de descarga

Esto es lo que usan la mayoría de los sitios de descarga. Hace clic en el enlace de descarga y lo lleva a una página con un montón de anuncios y dice "Su descarga comenzará en breve" algo similar. [ Ejemplo ] Con estos puede intentar analizar el enlace directo real desde la URL, pero eso sería específico del sitio, y la mayoría de los sitios no lo incluirán para evitar que lo eluda. Esto se hace a través de una meta http-equiv="refresh"etiqueta en el encabezado o JavaScript (el más común). Sin embargo, el JS generalmente tiene un respaldo de encabezado.

Aunque existe una solución. Si mira la fuente en la página de descarga, generalmente verá una <meta http-equiv="refresh">etiqueta (generalmente en una <noscript>etiqueta) con un atributo URLque apunta a la descarga real. Por lo tanto, use CURL (o cualquier otra herramienta HTTP) para descargar la página, analizarla y obtener ese valor. Sin embargo, un sitio puede excluir esto si quiere ser realmente desagradable, lo que requiere que tenga JavaScript para descargar archivos.

Probablemente también haya un bloque de JavaScript que enlace a la descarga. Puede estar ofuscado o vinculado desde otra URL. Su millaje puede variar tratando de analizar eso. También puede haber un "enlace directo" en la página. Podrías probar algunas técnicas para encontrar eso, pero de nuevo eso podría ofuscarse a través de JavaScript o incluso faltar todos juntos.

Jim McKeeth
fuente
11

Puede que no sea posible. Los sitios podrían alimentarlo a través de cientos de redireccionamientos antes de llegar al archivo.

Además, javascript se puede usar para proporcionar enlaces basados ​​en la URL que se le dio al servidor.

soandos
fuente
¡Gracias! ¿Cuáles son los nombres de tales y similares técnicas de no mostrar enlaces directos? Algunas referencias, como wikipedia, ...?
Tim
1
Solo redirección. No conozco ninguna otra técnica. Ver aquí
soandos
Cuando los enlaces son a archivos y, a diferencia de las páginas normales, generalmente se llama anti-sanguijuela .
Synetech
7

El sitio podría tener una secuencia de comandos, y cuando obtiene un cierto comando (la URL puede pasar un comando), puede devolver un archivo PDF (o algún otro archivo), sin redirigir. Hay una cuestión del lado del servidor y depende de cómo esté codificado el sitio. Sin solicitar realmente ese enlace al servidor, es poco probable que pueda descubrir cómo obtener el archivo. Y a veces, incluso si conocía la URL directa, es posible que no tenga permiso para acceder al enlace directo. Algunos sitios están codificados para que los enlaces directos no funcionen.

Ben Richards
fuente
1
Esto es correcto. Pequeña adición: cuando un cliente accede a un enlace oscuro como ese y el servidor quiere decirle al cliente que en realidad se trata de un archivo pdf y que debe guardarse como archivo pdf, el servidor se lo informa al cliente a través de HTTP de tipo de contenido encabezamiento.
vtest
3

Esta es más o menos la URL "verdadera", ya que para esos sitios web bien protegidos, debe enviar la URL completa para que el servidor autentique su solicitud. Es posible que luego se le dirija a otra URL, pero normalmente será una única vez. En otras palabras, estos sitios web de descarga de archivos nunca le proporcionarán un enlace directo que permita la eliminación.

En esta URL particular, los parámetros, que están protegidos por una firma digital, enumeran claramente el tiempo y las restricciones de IP del descargador. Para un sitio web con este nivel de competencia, es poco probable que se filtren enlaces directos.

billc.cn
fuente
3

Estos enlaces de redireccionamiento también suelen estar asociados con el estado de la sesión. Realizarán algunas comprobaciones de privilegios, en función de su inicio de sesión, antes de proporcionarle el enlace: sin acceso al recurso = sin acceso de enlace al recurso. Se puede usar para proporcionar acceso a archivos / recursos que están fuera de la raíz web, y la aplicación los transmite al solicitante, en lugar de estar disponible a través de una URL directa. Pero solo si tus privilegios lo permiten.

Un ejemplo de ambos está aquí. Te redirigirá a otra URL, basada en la cadena 'mkoenig' que agrega parms de URL adicionales. La redirección se realiza en la codificación del lado del servidor, que no podría (o al menos no debería) poder ver. Si luego va a 'Archivos web', los archivos enumerados son solo los archivos que el maestro ha hecho públicos. Es posible que tenga otros archivos a los que no puede acceder y que no se incluirán en la lista. Eso también se maneja en la codificación del lado del servidor, con respecto a lo que devolverá / no.

Sin hackear el servidor o tener acceso al código fuente del lado del servidor, no creo que pueda obtener el enlace real, e incluso si puede, puede que no sea útil a menos que su sesión le indique al servidor que le dé acceso al mismo. .

Greg

gthomson
fuente
2

Como arriba, es imposible. Le recomiendo que encienda una VM o tome una copia de Sandboxie para contener su navegador para enlaces como ese.

Editar

Sin saber qué sistema operativo está utilizando, le daré una respuesta general aquí.

Una VM es la abreviatura de una máquina virtual. Básicamente es una computadora creada por software que se ejecuta dentro de su computadora. Una máquina virtual tendrá su propio sistema operativo y navegador. Si bien todavía utiliza el Internet y el disco duro de su máquina, es una máquina separada desde el punto de vista del sistema operativo. Eso lo hace conveniente como un trozo de papel. Cualquier cosa que ocurra dentro de la VM no afecta su máquina real.

Virtualbox es el software que le recomiendo que obtenga para una VM, a menos que esté usando Windows, entonces recomendaría Virtual PC.

Sandboxie es como una máquina virtual, pero solo aísla aplicaciones específicas. Puede indicarle que ejecute una copia de su navegador y, esencialmente, cualquier archivo o acción que realice el navegador se redirige a una carpeta temporal. Entonces, si intenta descargar un virus, se lo redirige a una carpeta temporal que está en cuarentena desde el resto de su máquina. No es tan robusto como una VM, pero usa menos CPU / Memoria y es más rápido y más conveniente.

Primero probaría Sandboxie. Es una curva de aprendizaje más pequeña.

surfasb
fuente
1
¡Gracias! ¿Qué quiere decir con "encender una máquina virtual o tomar una copia de Sandboxie para contener su navegador para enlaces como tales"? ¿Algunas referencias para explicar cómo hacer las dos cosas?
Tim
Lo siento, ampliaré mi respuesta.
surfasb
¡Gracias! Mi sistema operativo es Ubuntu. ¿Pero no entiendo cómo el uso de VM puede identificar los enlaces directos?
Tim
1
Realmente no identifica el enlace por ti. Pero crea un entorno seguro que lo ayudará a identificar el enlace. No puede identificar los redireccionamientos sin compilar la página.
surfasb
1
No creo que su pregunta sea sobre seguridad. Él solo está buscando una manera de obtener el enlace directo al archivo.
magnífico
2

Es no es posible averiguar el enlace real.

El servidor maneja las solicitudes de archivos, usando un poco de WWW Rewrite (para servidores apache, por ejemplo), por lo que, por ejemplo, podría ir a una página www.example.com/13-this-site-has-nice-page-name.html, pero en realidad podría acceder a algún archivo php, con un parámetro, como:www.example.com/site_handler.php?UID=13

incluso si accede a un archivo pdf, puede haber una redirección en el lado del servidor.

Para las descargas de archivos con controladores, puede ser un poco más complicado, ya que puede ir a una página que es solo un controlador de descargas, por ejemplo: www.example.com?file_downloader.php?param1=7683&param2=jld8ijn, etc... en este caso, el script al que está accediendo podría enviarse con un encabezado (como archivo pdf), pero en realidad es un archivo php.

En conclusión: nunca se puede saber cómo se configuran el servidor y las secuencias de comandos, por lo que nunca se puede saber la dirección real, incluso si parece que lo sabe.

Itai Sagi
fuente
1

Cuando envía una solicitud a un servidor web (haga clic en un enlace), el servidor puede enviar varias respuestas diferentes. Ejemplos comunes son 404 (página no encontrada), 403 (prohibido) o 500 (error del servidor). Probablemente el código de respuesta más común es 200 (Ok), pero nunca lo verá porque generalmente va acompañado de la página que esperaba ver.

Aquí hay otros dos códigos en juego: 301 y 302. Los códigos 301 y 302 son códigos de redireccionamiento, y le dicen a su navegador que la respuesta que desea se ha movido a otra ubicación. La principal diferencia entre ellos es cómo el navegador almacena en caché las cosas. Un código 301 significa "movido permanentemente", y la próxima vez que intente visitar el enlace original, el navegador puede recordar que la página se ha movido e ir directamente a la nueva ubicación. 302 significa "Encontrado en otro lugar" y proporcionará un enlace que su navegador debe usar solo temporalmente.

Debería ser posible escribir un programa que verifique un enlace, y mientras siga recibiendo 30x respuestas, siga la respuesta, hasta que finalmente obtenga un 200. En este punto, en lugar de descargar el contenido, debería mostrarle el enlace.

Desafortunadamente, también es más complicado que eso. Una página HTML también puede redirigir a una nueva ubicación mediante una etiqueta meta en la sección de cabecera de la página que se ve algo como esto: <meta http-equiv="refresh" content="0;url=NEW PAGE URL" />. Por lo tanto, dicho programa ya tendría que analizar completamente html para asegurarse de que llegamos a la última redirección.

Además, una página podría redirigirlo aún más usando JavaScript, y el JavaScript podría estar ofuscado. Así que ahora nuestro programa hipotético también tiene que entender javascript. En este punto tenemos un navegador web totalmente funcional. Nos faltan los pequeños detalles para mostrar una página en la pantalla, pero nuestro programa tiene casi todo lo que necesita para un navegador web completo, incluidos todos los problemas de seguridad que lo acompañan. Ya no estás mejor que si hubieras hecho clic en el enlace normalmente en primer lugar.

Joel Coehoorn
fuente
1

Suponiendo Windows: instale el Proxy de depuración web de Fiddler , habilítelo. Luego navegue a su URL inicial y mire todas las redirecciones en el panel izquierdo de Fiddler. En el panel derecho, cambie las pestañas para mostrar "Encabezados de solicitud" y "Encabezados de respuesta". Lo he usado con éxito exactamente para ese propósito.

Por otro lado, la URL "final" por sí sola puede no funcionar de la misma manera si navega directamente a ella porque la solicitud puede no tener el referente correcto o perder algunas otras restricciones.

Pero incluso puede enviar solicitudes personalizadas con encabezados personalizados en Fiddler. Consulte la pestaña "Generador de solicitudes" para eso.

oleschri
fuente
0

Esto depende en gran medida del sitio.

Para hacer esto, debe estudiar cada sitio individualmente y tener un mecanismo (o código) separado para que cada sitio devuelva el URI directo.

También puede estudiar algunos complementos de navegador de código abierto que proporcionan una funcionalidad similar.

bhagyas
fuente
0

Para verificar a dónde lo redirige un enlace puede usar http://longurl.org/ . Es especialmente útil para URL acortadas. No sirve para descargas con script, etc.

Omar Kohl
fuente
0

Si está usando Firefox, puede usar un complemento llamado RequestPolicyque, entre otras cosas, hará una pausa y le pedirá permiso cada vez que sea redirigido a un dominio diferente. No funcionará si desea encontrar una redirección que no vaya a un dominio diferente, pero estoy seguro de que hay un complemento de Firefox diferente para el que no conozco =)

https://www.requestpolicy.com/

Tenga en cuenta que romperá muchos sitios que usan una CDN (Red de distribución de contenido) ya que, de forma predeterminada, bloquea todas las imágenes de dominio cruzado, scripts, CSS y redireccionamientos. Por lo tanto, no es la mejor opción si desea saber siempre hacia dónde se dirige una redirección, a menos que esté preparado para tener que seguir algunos pasos adicionales cada vez que visite un nuevo sitio web.

William Lawn Stewart
fuente
0

No estoy realmente seguro, pero si está utilizando CUrl, ¿no puede simplemente obtener el contenido de la URL (get_file_contents (url) en PHP) y luego verificar el tipo MIME?

Sterex
fuente