X-PHP
phpggc
Librería de cadenas de gadgets para unserialize() de PHP con una CLI que genera payloads de deserialización listos para frameworks y librerías comunes.
Sitio oficialVolver al catálogo
RESUMEN
phpggc (github.com/ambionics/phpggc), de Ambionics Security, no encuentra vulnerabilidades de deserialización PHP — asume que ya hay una confirmada y resuelve el siguiente problema: construir el grafo de objetos serializado, o "cadena de gadgets", que convierte una llamada a unserialize() en ejecución remota de código, escritura de archivo u otro impacto. Una cadena de gadgets encadena métodos mágicos (__wakeup, __destruct, __toString y similares) ya presentes en las propias dependencias del objetivo, de modo que reconstruir el grafo de objetos hace que se disparen en secuencia hacia un resultado elegido por el atacante.
Incluye cadenas preconstruidas para decenas de librerías y frameworks PHP muy usados (Laravel, Symfony, Monolog, Guzzle, SwiftMailer, plugins de WordPress y más), así que un tester que confirmó un sink de unserialize() y huelló las dependencias de la app puede generar un payload funcional con un solo comando en vez de reconstruir una cadena desde cero — por lo que la librería también necesita actualizarse a medida que los frameworks objetivo parchean o eliminan los métodos mágicos vulnerables de los que depende una cadena concreta.
CASOS DE USO
Casos de uso en un engagement
- 01
Generar un payload funcional de RCE o escritura de archivo para un sink de unserialize() confirmado en un framework huellado.
- 02
Listar y filtrar las cadenas de gadgets disponibles (phpggc -l) para que coincidan con las versiones de dependencias del objetivo.
- 03
Codificar un payload generado (base64, URL-encode) para ajustarlo al mecanismo de entrega que requiera un sink concreto.
- 04
Cruzar los resultados de huella de classpath/librerías de GadgetProbe con las cadenas soportadas por phpggc para elegir la correcta.
PRIMEROS PASOS
Una vez confirmado que una app PHP hace unserialize() sobre entrada controlada por el atacante, para generar un payload de explotación funcional en vez de escribir la cadena de gadgets a mano.
- Confirma que el sink de unserialize() es real y huella qué librerías/frameworks PHP y versiones carga realmente el objetivo.
- Clona phpggc y lista las cadenas de gadgets disponibles para esa huella (phpggc -l <palabra-clave>).
- Genera el payload para la cadena que coincide con el comando que quieres ejecutar.
- Aplica la codificación que necesite el punto de entrega (-b para base64, -u para URL-encode).
- Entrega el payload al sink confirmado y verifica el impacto con un chequeo out-of-band o de escritura ciega.
./phpggc Laravel/RCE1 system id -bANTES DE USARLA
Qué revisar antes de lanzarla
Un payload generado es código de explotación funcional desde el momento en que se crea — guárdalo y transmítelo según las reglas de manejo de evidencia del engagement, no en un directorio compartido de pruebas.
Que una cadena coincida con la librería huellada no garantiza que se dispare — métodos mágicos parcheados, funciones deshabilitadas o un orden de autoload distinto pueden romperla en silencio.
Ejecuta los payloads generados solo contra el sink confirmado y los hosts explícitamente en alcance; una cadena de RCE funcional es tan destructiva como cualquier otro exploit una vez que llega.