PHP-FPM word aangebied as 'n superieure alternatief vir die standaard PHP FastCGI, wat funksies bied wat veral voordelig is vir webwerwe met hoë verkeer. Dit werk deur 'n meesterproses wat 'n versameling werkerprosesse toesig hou. Vir 'n PHP-skrip versoek, is dit die webbediener wat 'n FastCGI proxy-verbinding na die PHP-FPM diens begin. Hierdie diens het die vermoë om versoeke te ontvang via netwerkpoorte op die bediener of Unix-sokke.
Ten spyte van die intermediêre rol van die proxy-verbinding, moet PHP-FPM op dieselfde masjien as die webbediener werk. Die verbinding wat dit gebruik, terwyl dit proxy-gebaseerd is, verskil van konvensionele proxy-verbindinge. Wanneer 'n versoek ontvang word, verwerk 'n beskikbare werker van PHP-FPM dit—dit voer die PHP-skrip uit en stuur dan die resultate terug na die webbediener. Nadat 'n werker die verwerking van 'n versoek voltooi het, word dit weer beskikbaar vir komende versoeke.
Maar wat is CGI en FastCGI?
CGI
Normaalweg word webbladsye, lêers en al die dokumente wat van die webbediener na die blaaskas oorgedra word, in 'n spesifieke openbare gids soos home/user/public_html gestoor. Wanneer die blaaskas sekere inhoud versoek, kyk die bediener na hierdie gids en stuur die vereiste lêer na die blaaskas.
As CGI op die bediener geïnstalleer is, word die spesifieke cgi-bin gids ook daarby gevoeg, byvoorbeeld home/user/public_html/cgi-bin. CGI-skripte word in hierdie gids gestoor. Elke lêer in die gids word as 'n uitvoerbare program behandel. Wanneer 'n skrip uit die gids benader word, stuur die bediener 'n versoek na die toepassing wat verantwoordelik is vir hierdie skrip, eerder as om die lêer se inhoud na die blaaskas te stuur. Nadat die invoerdata verwerking voltooi is, stuur die toepassing die uitvoerdata na die webbediener wat die data na die HTTP-kliënt oordra.
Byvoorbeeld, wanneer die CGI-skrip http://mysitename.com/cgi-bin/file.pl benader word, sal die bediener die toepaslike Perl-toepassing deur CGI uitvoer. Die data wat uit die skrip se uitvoering gegenereer word, sal deur die toepassing na die webbediener gestuur word. Die bediener sal op sy beurt die data na die blaaskas oordra. As die bediener nie CGI gehad het nie, sou die blaaskas die .pl lêer se kode self vertoon het. (verklaring van hier)
FastCGI
FastCGI is 'n nuwer webtegnologie, 'n verbeterde CGI weergawe aangesien die hooffunksionaliteit dieselfde bly.
Die behoefte om FastCGI te ontwikkel, is ontstaan deur die vinnige ontwikkeling en kompleksiteit van toepassings, sowel as om die skaalbaarheid tekortkominge van CGI-tegnologie aan te spreek. Om aan daardie vereistes te voldoen, het Open MarketFastCGI bekendgestel – 'n hoëprestasie weergawe van die CGI-tegnologie met verbeterde vermoëns.
disable_functions omseiling
Dit is moontlik om PHP-kode te loop deur die FastCGI te misbruik en die disable_functions beperkings te vermy.
Via Gopherus
Ek is nie seker of dit in moderne weergawes werk nie, want ek het een keer probeer en dit het niks uitgevoer nie. Asseblief, as jy meer inligting oor hierdie het, kontak my via [PEASS & HackTricks telegram groep hier](https://t.me/peass), of twitter [@carlospolopm](https://twitter.com/hacktricks_live).
Met Gopherus kan jy 'n payload genereer om na die FastCGI luisteraar te stuur en arbitrêre opdragte uit te voer:
Uploading and accessing this script die eksploit gaan na FastCGI gestuur word (deaktiveer disable_functions) en die gespesifiseerde opdragte gaan uitgevoer word.
PHP eksploit
Ek is nie seker of dit in moderne weergawes werk nie, want ek het een keer probeer en ek kon niks uitvoer nie. Trouens, ek het gesien dat phpinfo() van FastCGI uitvoering aangedui het dat disable_functions leeg was, maar PHP (op een of ander manier) het steeds verhoed dat ek enige voorheen gedeaktiveerde funksie kon uitvoer. Asseblief, as jy meer inligting hieroor het, kontak my via [PEASS & HackTricks telegram groep hier](https://t.me/peass), of twitter [@carlospolopm](https://twitter.com/hacktricks_live).
Dit is 'n php skrip om die fastcgi protokol te benut om open_basedir en disable_functions te omseil.
Dit sal jou help om streng disable_functions te omseil na RCE deur die kwaadwillige uitbreiding te laai.
Jy kan dit hier toegang: https://github.com/w181496/FuckFastcgi of 'n effens gemodifiseerde en verbeterde weergawe hier: https://github.com/BorelEnzo/FuckFastcgi
Jy sal vind dat die ontploffing baie soortgelyk is aan die vorige kode, maar in plaas daarvan om te probeer om disable_functions te omseil met PHP_VALUE, probeer dit om 'n eksterne PHP-module te laai om kode uit te voer met die parameters extension_dir en extension binne die veranderlike PHP_ADMIN_VALUE.
NOTE1: Jy sal waarskynlik die uitbreiding moet hercompileer met die dieselfde PHP weergawe wat die bediener gebruik (jy kan dit binne die uitvoer van phpinfo nagaan):
NOTE2: Ek het daarin geslaag om dit te laat werk deur die extension_dir en extension waardes binne 'n PHP .ini konfigurasie lêer in te voeg (iets wat jy nie sal kan doen nie wanneer jy 'n bediener aanval). Maar om een of ander rede, toe ek hierdie ontploffing gebruik en die uitbreiding van die PHP_ADMIN_VALUE veranderlike laai, het die proses net gesterf, so ek weet nie of hierdie tegniek steeds geldig is nie.