Hacking con imágenes 2

  • 0

Hacking con imágenes 2

En un post anterior se describió un posible ataque a través de imágenes bmp, esta vez vamos a hablar de otro tipo de ataque pero también a través de imágenes. La diferencia es que, esta vez, el ataque es del lado del cliente y/o servidor que funciona con imágenes de tipo jpg.

El peligro puede venir de parte del lado del servidor, siempre que en una web exista algún método de subir una imagen jpg. Este problema es muy típico que en foros y otros sitios web donde el usuario tiene permitido subir imágenes y compartirlas con los demás usuarios.

A grandes rasgos el problema se produce al no comprobar el servidor si la “supuesta” imagen que sube el usuario es en realidad una imagen.

Vamos a ver como se puede aprovechar las medidas que se usan para comprobar el código fuente del lado de un servidor, en el siguiente codigo vemos que el servidor comprueba si el tipo del fichero subido es “image/jpg”. Veamos un ejemplo:

<input name="fileToUpload" type="file" onchange="check_file()" >
if($_FILES['userfile']['type'] != "image/jpg")

Muchas veces los programadores utilizarán un código similar que  hace lo que se supone debe hacer, checkea el archivo para comprobar la extensión de lo subido. Lo malo es que si solo hace la comprobación del tipo de archivo al que se refiere se puede truncar esta medida de comprobación cambiando por ejemplo la extensión del archivo.

Por ejemplo, en programación esto definiría los tipos de extensiones permitidas.

$valid_file_extensions = array(".jpg", ".jpeg", ".gif", ".png");

Hay que tener muy en cuenta la hora de filtrar las entradas de usuario que pueden reportar un comportamiento distinto al esperado e implementarlo a través de la programación.

Funciones como strrchr dan mucho juego pues puede ser utilizado para que se consiga baypassear esta comprobación.

$file_extension = strrchr($_FILES["file"]["name"], ".");

Ejemplo de posibles intentos que en muchos casos pueden llegar a funcionar, al subir una imagen a una web que solo comprueba alguna función del tipo strrchr. Con imaginación , alguien maliciosamente podría testear funciones e intentar subir una webshell como c99. Tenemos un ejemplo de este tipo en la siguiente URL http://www.php.net/manual/en/function.strrchr.php

c99.jpg.php – Es posible que llegue a satisfacer la subida del jpg

c99.jpg.PhP – Ofuscación.

c99.php;.jpg – A veces puede ignorar lo que hay detrás de un ;

c99.php.test – Puede ser que se ignore .test

c99.php.xxxjpg – Es posible que invalide el final xxxjpg por invalido

De nuevo, para explotar este tipo de vulnerabilidad, necesitaremos de algo que convierta una imagen esta vez jpg, en una webshell con código malicioso. Esta herramienta nos permite utilizar el espacio de de los metadatos que contiene un jpg para insertar ese código. Simplemente genial.

http://kaoticcreations.blogspot.co.uk/2013/10/ohno-evil-image-builder-meta-manipulator.html

Desde el punto de vista de la programación cada vez más, se están estableciendo unos patrones de metodología de control del desarrollo de la aplicación a nivel de la seguridad. Existen una serie de metodologías que ayudan a realizar ese tipo de comprobaciones. Entendemos que esto es algo que no debe estar resumido en una API de control de usuarios, sino como parte de una rutina que el programador debe asumir además como llevar un control de excepciones (exceptions, errors, etc) que pueda reportarle la aplicación. Se puede resumir en no dejar cabos sueltos, ya que el no tratarlos correctamente puede terminar por convertirse en una vulnerabilidad y ser explotada.

Por todo ello es recomendable que para cualquier proyecto existan una serie de protocolos, metodologías, asesores que guíen en todas las fases de vida de dicho proyecto desde el punto de vista de la seguridad. Cuanto antes se introduzcan expertos o metodologías de seguridad en un proyecto ayudara a que los costes de los cambios sean mínimos si lo comparamos con los costes que se pueden dar en, por ejemplo, reestructurar una herramienta para implementar contramedidas para que los “usuarios” no suban ficheros que no debieran.

Recordar que la seguridad es una lucha de todos, tanto de los que prestan los servicios (web, programas, etc) como del usuario. La seguridad debe de ser proactiva por ambas partes.

Nuestra empresa estará encantada de ayudarles en sus proyectos de seguridad con un grupo de profesionales altamente cualificados que darán soluciones a sus problemas y necesidades

 

 


  • 1

Hacking a través de imágenes

Tags :

Category : Ciberseguridad , Exploit

¿Es posible ejecutar código malicioso a través de una imagen?.
Navegando un poco me encontre un artículo muy interesante sobre una técnica de hacking a través de imágenes.
Un script en python que puede embeber código javascript dentro de una imagen bmp, dejando esta
imagen correctamente para que se muestre en el navegador.
Un ejemplo de una página web que podría contener una imagen con un script malicioso

 

<html>
<head>
<title> favorites / bookmark title goes here </title>
</head>
<body>
<h1> My malicius image page </h1>
<img src=”/home/pablo/hacks/bmp1.bmp” >
<script src = “/home/pablo/hacks/bmp1.bmp” >
</body>
</html>

Como se ve la imagen y el script son el mismo archivo
Para crear este imagen bmp maliciosa podemos usar el siguiente script creado por Marco Ramilli, espcialista en security research. marcoramilli.blogspot.com y que el mismo ha colgado en pastebin.
http://pastebin.com/04y7ee3u

Con el mismo Marco explica, es  una implementación  para sacar partido a ciertos bugs que  algunas librerias que manejan el parseo de los bitmaps contienen. Lo que hace es injectar código javascript dentro de la imagen. ¿Pero como es posible que una imagen ejecute código javascript?
El primer paso consiste en crear la imagen maliciosa que se insertaría en un servidor web.

 

python bmpinjector.py.py  -i image.bmp "alert("test");"
 |======================================================================================================|
 | [!] legal disclaimer: usage of this tool for injecting malware to be propagated is illegal.          |
 | It is the end user's responsibility to obey all applicable local, state and federal laws.            |
 | Authors assume no liability and are not responsible for any misuse or damage caused by this program  |
 |======================================================================================================|
                    
[+] Finished!

 

La idea es crear una cabecera de archivo BMP con x2Fx2A y luego cerrarlo con  x2Ax2F. El servidor intentará verificar el archivo como un archvo javascript, de ahí esta modificación de las cabeceras del archivo . Para que sea un archivo javascript válido, necesita usar la header (x42x4D) como una variable y/o parte del código, es por esto último que se necesita injectar también la expresión like “=1;” o más comunmente usada “=a”. Asi que el incrustado del payload requiere de ciertas cadenas para que el servidor interprete que el archivo es válido, tanto como bmp como javascript.

Para hacer una prueba vamos a ejecutar el script con un simple alert.
python bmpinjector.py -i bmp1.bmp “alert(“test”);”
Ahora vamos a ejecutar el script para generar un payload de ejemplo más avanzado ofuscando el código:

 

python bmpinjector.py -i bmp1.bmp "var _0x9c4c=["x48x65x6Cx6Cx6Fx20x57x6Fx72x6Cx64x21","x0A","x4Fx4B"];var a=_0x9c4c[0];function MsgBox(_0xccb4x3){alert(_0xccb4x3+_0x9c4c[1]+a);} ;MsgBox(_0x9c4c[2]);"

Esta vulnerabilidad ya ha sido corregida en la mayoría de servidores y/o navegadores, pero no en todos, como siempre habrá alguno que no esté actualizado y demuestra una vez más que hay formas muy diversas de ejecutar código malicioso insertado en todo tipo de objetos que luego manejan los servidores.

Articulo completo [eng]:
http://marcoramilli.blogspot.com.es/2013/10/hacking-through-images.html