Una de las vulnerabilidades más habituales hasta hace poco era un incorrecto uso de la función unserialize()
disponible en PHP. Con el tiempo se ha reemplazado el uso de esta función con el uso de json_decode()
. A pesar de esto, todavía encontramos códigos vulnerables y con PHPGGC (PHP Generic Gadget Chains) podemos auditar rápidamente estos fallos de seguridad.
PHPGGC incluye soporte para frameworks conocidos como Doctrine, Guzzle, Monolog, Laravel, SwiftMailer, Symfony y Slim. No se descarta que a la larga se incluyan más frameworks, ya que su desarrollo es activo y corre a cargo de la empresa Ambionics Security.
PHPGGC, script para crear payloads unserialize() de frameworks PHP.
Al tratarse de un script en PHP podemos ejecutarlo de forma sencilla a través de la consola con PHP-CLI. Para empezar ejecutaremos el comando de ayuda ./phpggc –h
para que nos muestre todas las opciones disponibles:
PHPGGC: PHP Generic Gadget Chains
---------------------------------
Usage
./phpggc [-h|-l|-w|-h|-s|-u|-b] <GadgetChain> [arguments]
Optional parameters
-h Displays advanced help
-l Lists available gadget chains
-w <wrapper>
Specifies a file containing a function: wrapper($payload)
This function will be called before the generated gadget is serialized.
-s Soft URLencode
-u URLencodes the payload
-b Converts the output into base64
El ejemplo de uso básico sería algo como:
./phpggc Laravel/RCE1 'phpinfo().die();'
Esto nos daría la salida de código listo para usar en la función unserialize()
y en este ejemplo se ejecutaría phpinfo()
.
El uso de esta aplicación requiere de un conocimiento básico de la serialización de objetos en PHP para poder explotar correctamente esta vulnerabilidad.
PHPGGC está disponible en su página de GitHub como proyecto libre y de código abierto, donde además conseguiréis instrucciones detalladas de su uso: https://github.com/ambionics/phpggc