Bypass ya Disable Functions - dl Function
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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
dl() inaruhusu PHP kupakia shared extension wakati wa runtime. Ikiwa unaweza kuifanya ipakishe attacker-controlled module, unaweza kusajili PHP function mpya ambayo ndani yake inaita execve, system, au primitive nyingine ya native na kwa hivyo kupita disable_functions.
Huu ni primitive halisi, lakini kwa targets za kisasa ni nadra zaidi kuliko maelezo ya zamani yanavyopendekeza.
Kwa nini bypass hii haipo sana leo
Vizuizi vikuu ni:
dl()inabidi ipo na isizuilweenable_dlinabidi bado iweze kuruhusu dynamic loading- SAPI ya target inabidi iweze kuunga mkono
dl() - payload inabidi iwe valid PHP extension iliyokompyuliwa kwa same target ABI
- extension inabidi ifikike kutoka configured
extension_dir
Manual rasmi ya PHP ni ukaguzi wa ukweli muhimu zaidi hapa: dl() is only available for CLI and embed SAPIs, and for the CGI SAPI when run from the command line. Hii ina maana kwamba technique hii haina kawaida kupatikana kwenye requests za kawaida za PHP-FPM/mod_php, hivyo angalia SAPI kabla ya kutumia muda kujenga payload.
Pia kumbuka kwamba enable_dl ni setting ya INI_SYSTEM na, kuanzia PHP 8.3.0, PHP imeitaja kama deprecated, hivyo kwa kawaida huwezi kuibadilisha wakati wa runtime kutoka attacker-controlled PHP code.
If dl() is not viable, go back to the broader list of module/version dependent bypasses.
Triage ya haraka kutoka foothold
Kabla ya kujenga chochote, chukua vigezo kamili ambavyo module inapaswa kufanana navyo:
<?php
phpinfo();
echo "PHP_VERSION=" . PHP_VERSION . PHP_EOL;
echo "PHP_SAPI=" . php_sapi_name() . PHP_EOL;
echo "ZTS=" . (PHP_ZTS ? "yes" : "no") . PHP_EOL;
echo "INT_BITS=" . (PHP_INT_SIZE * 8) . PHP_EOL;
echo "enable_dl=" . ini_get("enable_dl") . PHP_EOL;
echo "extension_dir=" . ini_get("extension_dir") . PHP_EOL;
echo "disabled=" . ini_get("disable_functions") . PHP_EOL;
?>
What unachohitaji kujali:
PHP_SAPI: ikiwa hii nifpm-fcgiauapache2handler,dl()kawaida si chaguo kwa web exploitationextension_dir: payload lazima iload kutoka hapaPHP Version, architecture, debug/non-debug, na ZTS/non-ZTS: module yako lazima iendane naodisable_functions: thibitisha kamadlhaipo kwa sababu imezimwa au kwa sababu SAPI haiku-support
Practical exploitation constraints
1. You normally need write access to extension_dir
Hii ndiyo kizuizi kikubwa zaidi.
dl() inachukua extension filename, na PHP inaload kutoka extension_dir. Kwa vitendo, hili linamaanisha kuwa upload ya kawaida ya file yoyote hadi /var/www/html/uploads haitoshi. Bado unahitaji path ya kuweka .so/.dll ambako PHP itapakia extensions kutoka.
Mazingira halisi ambapo hili linaweza kutumika:
- CTFs au ma-labs yaliyounganishwa kwa makusudi ambapo
extension_dirinaweza kuandikwa - Shared-hosting au container mistakes ambazo zinaonyesha extension path inayoweza kuandikwa
- Primitive ya kuandika file yoyote tofauti ambayo tayari inafikia
extension_dir - Scenarios za post-exploitation ambapo tayari umepanda hadhi vya kutosha kuweka files hapo
2. The module must match the target build
Kulingana tu na PHP_VERSION haitoshi. Extension pia inahitaji kuendana na:
- OS na CPU architecture
- libc/toolchain expectations
ZEND_MODULE_API_NO- debug vs non-debug build
- ZTS vs NTS
Kama haya hayataendani, dl() itashindwa au kusababisha process icrash.
3. open_basedir is not the main defense here
Mara tu ukipoa kuweka module katika extension_dir na kuita dl(), code ya extension inatekelezwa ndani ya process ya PHP. Kwa hatua hiyo kizuizi muhimu kilikuwa si open_basedir, bali uwezo wa kuweka shared object halali katika path ya loading ya extensions.
Building the malicious extension
Njia ya jadi bado inafanya kazi:
- Recreate the victim build kadri iwezekanavyo
- Tumia
phpize,./configure, namakekujenga shared extension - Export function ya PHP kama
bypass_exec($cmd)inayozunguka native command execution - Upload module iliyokomplewa ndani ya
extension_dir - Load nayo kwa
dl()na ita function iliyotolewa
Attack hii ni ya zamani, lakini bado inahusiana kwa sababu changelogs za PHP 8.x zinaendelea kujumuisha dl()-specific crash fixes. Primitive bado ipo; sehemu ngumu ni kupata deployment ambapo inaweza kufikiwa na ambapo unaweza kuweka module inayofaa.
Minimal workflow
On the attacker box
mkdir bypass && cd bypass
phpize
./configure
make
Shared object itakayotolewa kawaida itakuwa chini ya modules/.
Ikiwa unajenga kwenye mazingira tofauti na yale ya lengo, chukua faili iliyotengenezwa kama rasimu hadi utakapothibitisha kuwa ABI inalingana na ile ya mhusika.
Kupakia na kutumia extension
Ikiwa lengo lina msaada wa kweli kwa dl() na module iko ndani ya extension_dir, upande wa runtime ni rahisi:
<?php
if (!extension_loaded('bypass')) {
dl('bypass.so'); // use the correct filename for the target platform
}
echo bypass_exec($_GET['cmd']);
?>
Kwenye Windows, jina la faili kwa kawaida litakuwa .dll, ilhali kwenye malengo ya aina ya Unix kawaida litakuwa .so.
Vidokezo vya mshambuliaji
- Usidhani hii inafanya kazi kwa mbali kwa sababu tu
function_exists("dl")inarudisha true katika nyaraka fulani au maelezo ya zamani; thibitisha SAPI hai - Jaribio la
dl()lililoshindwa linaweza kusababisha mchakato wa PHP kufa ikiwa module haifai - Kuanzia PHP 8 na kuendelea, disabled functions zinaondolewa kutoka kwenye function table, hivyo uorodheshaji wa userland unaweza kutofautiana na machapisho ya zamani
- Ikiwa huwezi kuandika kwenye
extension_dir, mbinu hii kwa kawaida si ya vitendo kama FPM/FastCGI,LD_PRELOAD, au module-specific bypasses zilizoshughulikiwa tayari katika sehemu hii
Marejeo
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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


