Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2024-4577-lab — # Laboratorio CTF basado en Docker que demuestra CVE-2024-4577, inyección de argumentos PHP-CGI que conduce a RCE. Incluye PHP 5.4.1 CGI vulnerable, scripts de explotación y recuperación de la bandera. | Kitploit
Herramientas/GitHubGitHub/khwajasaad267-coder/cve-2024-4577-lab
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebCTFPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubkhwajasaad267-coder/cve-2024-4577-lab

cve-2024-4577-lab

# Laboratorio CTF basado en Docker que demuestra CVE-2024-4577, inyección de argumentos PHP-CGI que conduce a RCE. Incluye PHP 5.4.1 CGI vulnerable, scripts de explotación y recuperación de la bandera.

Ver Repositorio
24hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2024-4577 — Inyección de Argumentos en PHP-CGI → RCE (Laboratorio Docker / CTF)

Un laboratorio Docker autónomo, desde cero, que demuestra la primitiva real de inyección de argumentos → Ejecución Remota de Código detrás de CVE-2024-4577. Explótalo a través de http://localhost:8080, obtén una shell y lee la bandera desde dentro del contenedor.

Esta es una vulnerabilidad genuina, no simulada. El contenedor compila un binario PHP 5.4.1 CGI sin parchear y lo conecta detrás de Apache exactamente como se configuran los hosts vulnerables reales. No hay ningún "if password == flag" falso en ningún lugar — la única forma de obtener la bandera es lograr realmente la ejecución de código.


⚠️ Lee esto primero — Linux vs. Windows (importante y honesto)

El payload característico de CVE-2024-4577 usa %AD (un guion suave). Ese truco solo funciona en Windows, porque la codificación de caracteres "Best-Fit" de Windows convierte el byte 0xAD en un - (0x2D) real después de que el parche de CVE-2012-1823 de PHP ya haya verificado la cadena de consulta. Esa conversión de codificación la realiza el propio Windows — no ocurre dentro de un contenedor Docker Linux normal.

Por lo tanto, un laboratorio Linux fiel y ejecutable en tu máquina reproduce la misma primitiva RCE exacta — inyección de opciones de php-cgi a través de la URL → -d auto_prepend_file=php://input → ejecución de código — usando la forma literal - (que es el bug padre de CVE-2024-4577, CVE-2012-1823). La única diferencia con un objetivo real de CVE-2024-4577 en Windows es la capa de bypass de codificación %AD→-, que este README documenta en su totalidad (ver Cómo funciona y poc.http).

Este laboratorio LinuxCVE-2024-4577 real (Windows)
Componente vulnerablephp-cgiphp-cgi
Primitiva RCE-d auto_prepend_file=php://inputidéntica
Delimitador en la URL- literal%AD (best-fit → -)
¿Omite el parche de 2012?N/D (PHP anterior al parche)Sí, vía best-fit de Windows
Se ejecuta en Win 11 Home + Docker Desktop✅❌ (necesita contenedores Windows)

Si necesitas específicamente la reproducción bit a bit del %AD de Windows, necesitas un host Docker con capacidad de contenedores Windows (Windows Server / Win Pro + Hyper-V) — no se ejecutará en Windows 11 Home. El payload de Windows está incluido en poc.http como referencia.


1. Descripción de la CVE

CVE-2024-4577 — Inyección de Argumentos en PHP CGI que conduce a Ejecución Remota de Código. Descubierta por DEVCORE (Orange Tsai / Angelboy), divulgada el 2024-06-06.

Cuando PHP se implementa en modo CGI (o el binario php-cgi.exe es accesible de otro modo) en Windows con ciertas configuraciones regionales del sistema (chino tradicional/simplificado, japonés y otras), el servidor web pasa la cadena de consulta HTTP a php-cgi como argumentos de línea de comandos. Un atacante puede colar opciones de línea de comandos de php-cgi (-d ...) en esa cadena de consulta. La conversión de página de códigos best-fit de Windows convierte el byte de guion suave 0xAD (%AD) en un guion ASCII -, que se cuela por el endurecimiento de CVE-2012-1823 y permite al atacante establecer directivas INI arbitrarias de PHP — la más útil es auto_prepend_file=php://input con allow_url_include=1, que ejecuta el cuerpo de la solicitud proporcionado por el atacante como PHP. Resultado: ejecución remota de código sin autenticación. Fue armada en la naturaleza en cuestión de días (p. ej., el ransomware TellYouThePass).

2. Causa raíz

  1. CGI pasa la cadena de consulta como argv. Según RFC 3875, si la cadena de consulta de una solicitud CGI no contiene ningún = sin codificar, el servidor la divide por +, decodifica cada palabra en URL y las pasa al programa CGI como argumentos de línea de comandos. Por lo tanto, php-cgi recibe un argv controlado por el atacante.

  2. php-cgi analiza ese argv como opciones. Históricamente, php-cgi interpretaba -d key=value, -T, etc. de ese argv. Al proporcionar -d allow_url_include=1 -d auto_prepend_file=php://input, PHP ejecuta el cuerpo de la solicitud como código → CVE-2012-1823.

  3. La corrección de CVE-2012-1823 es incompleta en Windows. El parche de 2012 añadió una protección en sapi/cgi/cgi_main.c: aproximadamente "si la cadena de consulta (cruda) comienza con - y no tiene =, omitir el análisis de opciones (skip_getopt)." Un atacante que envíe un - literal ahora está bloqueado.

  4. La codificación best-fit derrota la protección (el bug de 2024). En Windows, PHP convierte la línea de comandos usando la página de códigos de la configuración regional con mapeo best-fit habilitado. El atacante envía %AD (byte 0xAD, guion suave). En el momento de la verificación de la protección, el primer byte es 0xAD, no -, por lo que skip_getopt no se establece. Más tarde, cuando PHP realmente construye el argv, Windows mapea por best-fit 0xAD → -, por lo que getopt ahora ve -d. La inyección de opciones se activa después de la verificación que se suponía que debía detenerla. Ese orden de verificar-luego-convertir es toda la vulnerabilidad.

En este laboratorio Linux, los pasos 1–2 se reproducen exactamente con un php-cgi que es anterior al parche del paso 3, por lo que la forma literal - funciona y demuestra la RCE idéntica. El paso 4 es la capa exclusiva de Windows, documentada pero no ejecutada (Linux no tiene conversión best-fit).

3. Versiones afectadas (CVE-2024-4577 real)

Corregida en 8.3.8, 8.2.20, 8.1.29. Por lo tanto, vulnerables:

  • PHP 8.3.0 – 8.3.7
  • PHP 8.2.0 – 8.2.19
  • PHP 8.1.0 – 8.1.28
  • PHP 8.0.x, 7.x, 5.x — fin de vida útil, sin parchear, también afectadas

Condiciones: sistema operativo Windows; PHP ejecutándose como CGI o con php-cgi.exe expuesto (la configuración predeterminada de XAMPP en Windows es vulnerable); una configuración regional afectada para la ruta best-fit. (El bug padre CVE-2012-1823 — la primitiva que ejecuta este laboratorio — afecta a cualquier sistema operativo que ejecute un php-cgi anterior a la corrección de 2012 en esta configuración.)

4. Estructura del proyecto```

cve-2024-4577-lab/ ├── Dockerfile # builds the lab: compiles unpatched PHP 5.4.1 CGI + Apache ├── Dockerfile.vulhub # fallback: prebuilt vulnerable base image (if compile fails) ├── docker-compose.yml # one-command build+run, maps localhost:8080 -> 80 ├── start.sh # container entrypoint (Apache foreground) ├── exploit.sh # one-shot RCE PoC (bash + curl) ├── poc.http # raw HTTP requests (Linux payload + real Windows %AD payload) ├── app/ │ └── index.php # ordinary web page (NOT itself vulnerable) ├── config/ │ ├── apache-vhost.conf # the vulnerable Apache <-> php-cgi wiring │ └── php.ini # minimal php.ini (cgi.force_redirect=0, etc.) ├── flag.txt # the flag (copied to /flag.txt in the container) └── README.md # this file

## 5. Requisitos previos

- **Docker Desktop** (Windows/macOS) o Docker Engine (Linux).
  Windows 11 Home: instala Docker Desktop con el backend **WSL 2** (predeterminado).
  → https://www.docker.com/products/docker-desktop/
- `curl` para la explotación (`curl.exe` está integrado en Windows 10/11; también en
  Git Bash / WSL / macOS / Linux).
- Acceso a Internet **durante la compilación** (descarga el código fuente de PHP 5.4.1).

## 6. Instrucciones de compilación

Abre una terminal en la carpeta `cve-2024-4577-lab/`.
Descargar herramienta