27 febrero 2012

¿Image Basic Authentication?

A menudo, y de hecho es habitual, ver en sistemas de foros distintos usuarios con firmas y avatares. La mayoría de estos sistemas usan código html ( <img src=""></img> ) para cargar las imágenes y mostrarlas.

Así que, el otro día tratando de ver la seguridad de uploaders me acordé de que algunos, simplemente validan el valor de Content-type. Así que, cambiándolo, estaríamos pareciendo una imagen y necesitaríamos serlo únicamente?




Por alguna razón, no filtran (dentro de las etiquetas de imágenes) la carga desde php, asp, etc.

Bién es sabido que, podemos modificar la cabecera de un archivo php para que pase por una imagen y así poder llegar a ejecutar el código php (y si se desea cargar la imagen con echo) en el momento en que alguien accede a la carga de esa imagen.


Esto nos da la oportunidad de ejecutar código PHP. ¿Os acordáis de la Http Basic Authentication? Hablo de Basic y no diggest (porque para nada nos sirven los datos que queremos cifrados).

En el momento en qué alguien solicite la carga de nuestra imagen ,y no acceda directamente, se mostrará una basic authentication que informará de que el foro ha perdido la sesión y solicita reintroducir los datos de nuevo.


>> Descargar Image_Basic_Authentication

El script funciona de forma muy básica, de hecho podeis leer el código sin muchos problemas. La mayoría de usuarios lo tomarán como un ataque de phishing, yo sin embargo aún no sé como calificarlo.


Aunque se trate solamente de phishing, son muchos los usuarios que en sistemas de foros como phpBB, vBulletin, MyBB,etc caerían en la trampa (por así decirlo). Quizás hasta nos encontramos con un administrador de estos despistados :O

¡Un saludo y muchas gracias por leernos! :)

------------------------------------------------------
Artículo cortesía de Alberto, editor de seginformatica.net

16 comments :

Jose dijo...

Un par de dudas Alberto.
1.- ¿Lo de Twitter sigue siendo explotable?
2.- Lo que dices es linkar la imagen con el php en nuestro servidor, ¿cierto? Entonces saldría el dominio de nuestro servidor donde tengamos la imagen. ¿No?
Si fuera directamente subir el PHP en el otro servidor, ya tendríamos el servidor cogido (system("loquesea") y listo).

Yo dijo...

Genial, me imagino meter algo así en algún sitio tipo forocoches donde hay tropecientos mil usuarios...

El problema de todo esto sigue siendo dónde mandas las credenciales, porque no las vas a mandar a tu casa...

p0is0n-123 dijo...

 1 - Lo de twitter es un ejemplo con el título, y no es explotable ya que cargas las imágenes al servidor de twitter y claramente no puedes subir código ejecutable.
2. - Sí, claro que saldría la dirección (léase dominio o ip) }:))
Si fuera directamente subiendo un archivo ejecutable sería "saltándose" el uploader y ya no sería Image Basic Authentication. }:]

Saludos y gracias!

p0is0n-123 dijo...

 Las credenciales las puuedes almacenar en distintos sitios (y no tiene porqué ser en el propio host en el que ofreces la imágen)... :)

Gracias por comentar, un saludo!

Medichi16 dijo...

Yo no acabo de entender cual es el proposito de esto que nos cuentas. ¿Es que el usuario que acceda a foro donde tenemos la "imagen" tenga que meter los datos de registro otra vez? ¿O redireccionar la pagina a nuestra pagina web?... Gracias!

p0is0n-123 dijo...

Se trata de que el usuario reintroduzca sus datos pensando que claramente se ha perdido la conexión (o lo que quieras puesto que puedes personalizar el mensaje).

Para mí es una forma de phishing un poco rara, ¡pero oye! ¿porqué no va a funcionar? }:D

Gracias a ti! Saludos :)

Jcernuda95 dijo...

Siempre se podrian mandar los datos a una cuenta de correo falso, creo...

Medichi16 dijo...

Ok! Gracias por la explicacion!

Gabi dijo...

o puedes usar un socket para escribirlo en un archivo en tú servidor. También ftp. En fin, mil formas.

Y como se supone que un desarrollador php filtra este tipo de ataque?

Por que la teoría es clara, filtrar el contenído, pero a mi solo se me ocurre comprobarlo con exif_imagetype y no se si es del todo correcto.

Un Saludo!

Invitado dijo...

 o comprobando las extensiones de las imagenes por ejemplo

Asdfasdf dijo...

Puedes configurar apache para que interprete jpg como php y seguiría funcionando, ¿no?

Quizás evitando que se cargue contenido de otros dominios en tu web guardando la imagen en tu servidor.

ysm51 dijo...

@8407e99ee879a3466c9db81a1bab7c6c 
Exacto con Forcetype app...

Ahora... para mitigarlo, creo que lo mas efectivo, es usar un proxy de imagenes, por ejemplo el de google... no?

Este método es algo efectivo, lo "teste" por allá en el 2007, cuando "LeandroA" codeo la aplicación "Spyuseragent", entre las varias opciones que tenia, se encontraba esta curiosidad de usar el http basic authentication para phishing.

Dsadas dijo...

Menuda chusta, ¿Realmente crees que se podría calificar como phishing o como chustaphising?

la dijo...

y esto podría funcionar para enviarlo por e-mail? o aplican otras restricciones?

Daniel dijo...

No me funciona... estoy probandolo en un foro propio ya que me dejo preocupado este asunto, pero solo aparece la imagen y no la ventana solicitando los datos... en la carpeta donde tengo los archivos se genera un error_log con los sgtes datos:

[09-Mar-2012 08:46:22] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/site/public_html/signature/index.php:9) in /home/site/public_html/signature/index.php on line 37 (y tambien line 38)

Anonymous dijo...

 Hola.

Tengo una duda. He bajado el fichero zip que públicas y he visto que son 2 ficheros, por una parte el script en php y pr otra parte la imagen .gif. El script carga el fichero php con file_get_contents y despues la muestra con un echo pero.... entonces, para poder mostrar la imagen en ese foro, tendriamos que poder subir 2 archivos, por un lado el script y por el otro la imagen, para que la funcion file_get_contents pueda encontrar el fichero que le pasamos como parámetro. ¿cierto?

Un saludo y muchas gracias.