## https://sploitus.com/exploit?id=9679A8E8-CCDA-596A-8099-795D772CAE1F
# CVE-2018-15133-PoC
Este script Python implementa un exploit de ejecuci贸n remota de c贸digo (RCE) para aplicaciones Laravel vulnerables mediante deserializaci贸n insegura, bas谩ndose en la vulnerabilidad CVE-2018-15133.
El exploit aprovecha una vulnerabilidad en Laravel (versiones 5.5.40 y anteriores, y 5.6.0 a 5.6.29) donde las sesiones cifradas son autom谩ticamente deserializadas sin validaci贸n adecuada. Con acceso a la clave APP_KEY de Laravel, un atacante puede cifrar payloads maliciosos que ser谩n deserializados y ejecutados en el servidor.
# Funcionamiento del Sistema de Sesiones Laravel
Laravel utiliza un mecanismo de cifrado sim茅trico para las sesiones con tres componentes:
- IV (Initialization Vector): Vector de inicializaci贸n aleatorio generado para cada sesi贸n
- Value: Valor cifrado usando AES-128-CBC o AES-256-CBC
- MAC: C贸digo de autenticaci贸n de mensaje (HMAC-SHA256) calculado sobre IV + value + APP_KEY
## Proceso:
- Recibe tres par谩metros de entrada: la clave APP_KEY de Laravel en base64, el comando a ejecutar y el dominio objetivo
- Invoca la herramienta PHPGGC con el gadget chain Laravel/RCE5 para generar una cadena de objetos PHP maliciosos
- Construye el comando del sistema operativo que se ejecutar谩 en el servidor v铆ctima (ejemplo: system('whoami');)
- Genera el payload serializado PHP que contiene los gadgets encadenados
- Decodifica el payload de base64 a formato binario
- Procesa la clave APP_KEY eliminando el prefijo "base64:" si existe
- Completa el padding necesario para que la clave sea base64 v谩lido
- Decodifica la clave de base64 a bytes
- Genera un vector de inicializaci贸n (IV) aleatorio de 16 bytes
- Cifra el payload usando AES en modo CBC con la clave y el IV
- Aplica padding PKCS7 al payload antes del cifrado
- Codifica el IV en base64
- Codifica el ciphertext (payload cifrado) en base64
- Concatena IV y value en base64 como mensaje para el HMAC
- Calcula el MAC usando HMAC-SHA256 sobre el mensaje concatenado con la clave como secreto
- Construye un objeto JSON con tres campos: iv, value y mac
- Codifica el JSON completo en base64
- Construye una petici贸n HTTP usando curl con el payload en la cookie laravel_session
- Env铆a la petici贸n al dominio objetivo
- El servidor Laravel recibe la cookie y decodifica el base64
- Laravel verifica la integridad del MAC contra el IV y value recibidos
- Laravel descifra el contenido usando AES-CBC con su APP_KEY
- Laravel deserializa autom谩ticamente el contenido descifrado
- PHP invoca las funciones m谩gicas __destruct() o __wakeup() de los objetos deserializados
- Se desencadena la cadena de gadgets que culmina en call_user_func() o eval()
- El comando del sistema operativo se ejecuta en el servidor
El exploit utiliza cadenas de gadgets que encadenan llamadas a funciones m谩gicas de PHP:
Durante la deserializaci贸n, PHP invoca autom谩ticamente `__destruct()` o `__wakeup()`, iniciando la cadena que culmina en `eval()` ejecutando c贸digo arbitrario.
Requisitos Previos
Para que el exploit funcione, el atacante necesita:
- La clave APP_KEY de Laravel (obtenida mediante filtraci贸n de variables de entorno, buckets S3 expuestos, c贸digo fuente, etc.)
- Versi贸n vulnerable de Laravel con deserializaci贸n habilitada por defecto
- PHPGGC instalado en el directorio ./phpggc/ https://github.com/ambionics/phpggc
Ejemplo de Uso
``` bash
python exploit.py "base64:dGhpc2lzYXNlY3JldGtleQ==" "whoami" "http://target.htb"
Este comando generar谩 un payload serializado que ejecutar谩 whoami cuando Laravel deserialice la sesi贸n.
```