关联漏洞
介绍
# 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.
```
文件快照
[4.0K] /data/pocs/7a23e2d59f3059a743b1d713ea0fc286d5aa0b02
├── [2.1K] exploit.py
└── [3.5K] README.md
1 directory, 2 files
备注
1. 建议优先通过来源进行访问。
2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。