Saber la versión PHP de un servidor web por los huevos de pascua
Los Huevos de Pascua son comunes entre los ingenieros tecnológicos. Famosos son los que los equipos de Apple han puesto a lo largo de la historia, que van desde mostrar fotos - que a veces se encuentran de la forma más inesperada - hasta vídeos, el discurso de Stanford de Steve Jobs o grabaciones de audio. En el caso de Microsoft, en sus productos han llegado hasta a meter juegos que puedes disfrutar desde el propio Excel 2010, donde está incluido el Missile Command y el Tower Defense. Los ingenieros de Google también son proclives, son famosos los Huevos de Pascua en Youtube donde se puede jugar también a juegos como Missile Command. En el nuevo Google Chrome Canary se ha metido en la página de error que muestra problemas de conexión de red el juego del T-Rex Runner, así que en lugar de tener una aburrida página que te frustra, podrás jugar con el dinosaurio.
Los Huevos de Pascua molan, pero a veces pueden ser peligrosos, especialmente si se pueden convertir en algún problema de seguridad. Lo cierto es que, debido a que los ingenieros ponen los Huevos de Pascua en versiones concretas de software, el descubrimiento de ellos deja claro cuál es la versión que está instalada, y éste es el caso que puede utilizarse en PHP para hacer fingerprinting y conocer si un servidor web tiene desactualizado el framework.
Las imágenes del framework PHP cargadas vía parámetros
Si alguna vez has visto un fichero PHP Info, sabrás que salen unas imágenes en el mismo. Estas imágenes son de PHP y el de Zend Engine. Si miras el código fuente podrás ver que se pintan llamando a los parámetros siguientes:
Figura 2: Logo de PHP que sale en info.php |
- Logo de PHP: ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
- Logo de Zend Engine: ?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
Figura 3: Logo de Zend Engine |
Para sacar estas imágenes se puede utilizar ese parámetro en cualquier fichero PHP de cualquier sitio web que no los haya capado,
Al igual que se obtiene un fichero PHP Info, y las imágenes de los logos, se puede obtener un fichero de respuesta con la lista de los autores de todas las versiones de ese software que vienen con ese framework.
Figura 4: Fichero de créditos en una versión de PHP 5.1.3 a 5.2.13 |
Para ello hay que cambiar el parámetro que hay que enviar al fichero PHP.
- ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
Figura 5: Fichero PHP Credits de una versión actualizada |
Por supuesto, los créditos de PHP cambian dependiendo de la versión, así que es un buen elemento para poder hacer un fingerprinting a la versión exacta del framework que está corriendo en un determinado sitio web.
La última de las características es la más peligrosa desde el punto de vista de seguridad, ya que dependiendo de la versión exacta se puede obtener un logo que cambia y afina bastante.
Figura 6: Logo de Elefante en un framework PHP en la web |
Para ello se debe utilizar el parámetro siguiente:
- ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
Figura 7: Diferentes imágenes que se obtienen en los huevos de pascua de PHP |
Y se obtendrán las siguientes imágenes dependiendo de la versión:
- PHP Versión 5.3 a actual: Logo de PHP con un elefante
- PHP Versión 5.1.3 a 5.2.13: Logo de PHP movido
- PHP Versión 5.0.4 a 5.1.2: Foto de Perro Terrier Escocés Negro.
- PHP Versión 5.0.0. a 5.0.3: Foto de un conejo.
- PHP Versión 4.3.11 a 4.4.6: Foto de Perro Terrier Escocés Negro.
- PHP Versión 4.3.0 a 4.3.10: Foto de Perro color canela sobre césped.
- PHP Versión 4.0.0 a 4.2.3: Foto de programador divertida.
Todas estas fotos son personales de los desarrolladores y el equipo que está detrás del proyecto, pero este Huevo de Pascua en concreto, que no está documentado, puede informar a un atacante - si no sale el logo del elefante, que tu sistema está sin actualizar con un buen número de bugs.
Figura 8: Sitio web con versión antigua de framework PHP |
Estos parámetros funcionan porque en el fichero de cabecera "php-source/ext/standard/info.h", en las líneas 53 a 56 puede leerse la definición de estos códigos. Así que basta con que comentes estas líneas de tu instalación y desaparecerán:
#define PHP_LOGO_GUID "PHPE9568F34-D428-11d2-A769-00AA001ACF42"
#define PHP_EGG_LOGO_GUID "PHPE9568F36-D428-11d2-A769-00AA001ACF42"
#define ZEND_LOGO_GUID "PHPE9568F35-D428-11d2-A769-00AA001ACF42"
#define PHP_CREDITS_GUID "PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000"
Por supuesto, mi recomendación es que lo quites. Cuanta menos información des de tu infraestructura, mejor que mejor, así que en las recomendaciones de nuestro sistema de pentesting persistente Faast se avisa a los clientes de este hecho.
2 comentarios:
Esto es una tonteria, porque si deshabilitas expose_php dehabilita los huevos de pascua, sino lo haces añade un header con la versión exacta por lo que no necesitas un metodo indirecto
Buenas tardes,
He revisado las lineas en el php-source/ext/standard/info.h y todas ellas estaban comentadas, y seguía apareciendo el logo. La única manera de quitar el logo ha sigo en el php.ini poniendo expose_php = Off y reiniciando apache.
Un abrazo y gran .. ... ... blog!
Publicar un comentario