2010-08-29 9 views
16

Mi servidor de anuncios ha sido pirateado durante el fin de semana.¿Cómo se piratea un sitio web mediante una "imagen codificada de forma malintencionada que contenía un script PHP oculto en su interior"?

Parece ser un problema generalizado, de acuerdo con this article.

Hay algo ahí que me hizo pensar ...

Los atacantes utilizaron un ataque para conseguir iniciar sesión derechos a su servidor, y luego cargar una imagen codificada maliciosamente que contenía un script PHP oculta dentro de él, dijo. Al ver la imagen de la , los atacantes obligaron a la secuencia de comandos para ejecutar en el servidor

¿Cómo es esto posible? ¿Se basa en la imagen que se abre con GD o similar? ¿Cargan una secuencia de comandos que se presenta como una imagen y de alguna manera lo incluyen?

Respuesta

33

Puede ser tan simple como subir un archivo como

GIF89a<?php 
echo 'hi'; 

Si el script de carga a prueba el tipo de contenido a través de fileinfo o mime_content_type() se reconoce como "datos de imagen GIF, la versión 89a", ya que GIF89a es el único número de patrón/magia que se requiere para identificar un archivo como gif.
Y el script de carga de OpenX aparentemente mantuvo el nombre de archivo propuesto, es decir, fue posible guardar esta "imagen" como foo.php en el servidor. Ahora, si solicitó ese archivo a través del http://hostname/uploaddir/foo.php, el script se ejecutó como un script php porque los servidores web generalmente/a menudo determinan el tipo de contenido solo por la extensión del nombre de archivo, p. a través de

<FilesMatch "\.php$"> 
    SetHandler application/x-httpd-php 
</FilesMatch> 

php a continuación, se hace eco de la principal GIF89a y ejecuta el bloque <?php ...code....
Poner el bloque <? Php en un comentario GIF es un poco más sofisticado, pero básicamente lo mismo.

+0

OK, esto es más probable. – Artefacto

+2

ver http://secunia.com/advisories/37475/: "La vulnerabilidad se debe a la secuencia de comandos banner-edit.php que permite subir archivos con extensiones arbitrarias a una carpeta dentro de la raíz web". – VolkerK

+0

+1 Información muy útil, gracias VolkerK! – alex

2

La única posibilidad que veo de un compromiso del servidor es que la imagen sea include d en lugar de lectura, p. Ej. readfile y otras funciones de transmisión.

+0

Tienes razón, pero tal vez me falta algo, ¿por qué alguien 'incluiría 'una imagen?Tal vez algún pobre control de caché basado en PHP que en lugar de 'echo readfile ($ file)' después de encabezados personalizados simplemente 'include's. – alex

+0

@alex No sé por qué alguien haría eso, pero lo he visto en SO. – Artefacto

+0

Sí, he visto este tipo de error, también, en el código de producción. Eso es tan malo como puede ser. – VolkerK

5

Su servidor está analizando ese archivo por el motivo w/e. Los atacantes están poniendo el PHP en el comentario de la imagen.

¿Cómo está validando el archivo es una imagen? Si lo haces únicamente en el tipo de mimo, entonces creo que pueden simular el encabezado de la imagen e incluir lo que quieran después de eso. VolkerK has a practical example

En el mundo perfecto, yo no serviría imágenes públicas vía PHP por temor a tal problema.

Sirve la imagen directamente con el servidor; Una buena sugerencia es guardar esas imágenes en un directorio donde se puedan servir sin PHP.

Creo que esa es la esencia, alguien me corrige si me equivoco.

+0

¿Cómo se puede agregar código a una imagen a través de los comentarios? Estoy interesado en hacer una imagen para probar algunos de mis otros sitios. – alex

+0

Entonces, básicamente, estás diciendo lo mismo que yo, ¿verdad? La imagen se incluye ¿De qué otro modo podría ejecutarlo el servidor? – Artefacto

+0

Cualquier editor de imágenes estándar podrá hacerlo. Así es como agrega un comentario en GIMP: http://img192.imageshack.us/img192/4104/createanewimage001.png –

Cuestiones relacionadas