PHP-FPM को मानक PHP FastCGI के श्रेष्ठ विकल्प के रूप में प्रस्तुत किया गया है, जो उच्च ट्रैफ़िक वाले वेबसाइटों के लिए विशेष रूप से लाभकारी सुविधाएँ प्रदान करता है। यह एक मास्टर प्रक्रिया के माध्यम से कार्यकर्ता प्रक्रियाओं के एक समूह की निगरानी करता है। PHP स्क्रिप्ट अनुरोध के लिए, यह वेब सर्वर है जो PHP-FPM सेवा के लिए एक FastCGI प्रॉक्सी कनेक्शन शुरू करता है। इस सेवा में सर्वर पर नेटवर्क पोर्ट या यूनिक्स सॉकेट के माध्यम से अनुरोध प्राप्त करने की क्षमता है।
प्रॉक्सी कनेक्शन की मध्यस्थ भूमिका के बावजूद, PHP-FPM को वेब सर्वर के समान मशीन पर कार्यशील होना आवश्यक है। इसका उपयोग किया जाने वाला कनेक्शन, जबकि प्रॉक्सी-आधारित है, पारंपरिक प्रॉक्सी कनेक्शनों से भिन्न है। एक अनुरोध प्राप्त करने पर, PHP-FPM से एक उपलब्ध कार्यकर्ता इसे संसाधित करता है—PHP स्क्रिप्ट को निष्पादित करता है और फिर परिणामों को वेब सर्वर को वापस भेजता है। एक कार्यकर्ता जब एक अनुरोध को संसाधित करना समाप्त कर लेता है, तो यह आगामी अनुरोधों के लिए फिर से उपलब्ध हो जाता है।
But what is CGI and FastCGI?
CGI
सामान्यतः वेब पृष्ठ, फ़ाइलें और सभी दस्तावेज़ जो वेब सर्वर से ब्राउज़र में स्थानांतरित होते हैं, एक विशेष सार्वजनिक निर्देशिका जैसे home/user/public_html में संग्रहीत होते हैं। जब ब्राउज़र कुछ सामग्री का अनुरोध करता है, तो सर्वर इस निर्देशिका की जांच करता है और आवश्यक फ़ाइल को ब्राउज़र में भेजता है।
यदि CGI सर्वर पर स्थापित है, तो विशेष cgi-bin निर्देशिका भी वहाँ जोड़ी जाती है, जैसे home/user/public_html/cgi-bin। CGI स्क्रिप्ट इस निर्देशिका में संग्रहीत होती हैं। निर्देशिका में प्रत्येक फ़ाइल को एक निष्पादन योग्य कार्यक्रम के रूप में माना जाता है। जब निर्देशिका से एक स्क्रिप्ट तक पहुँचते हैं, तो सर्वर इस स्क्रिप्ट के लिए जिम्मेदार एप्लिकेशन को अनुरोध भेजता है, बजाय इसके कि फ़ाइल की सामग्री को ब्राउज़र में भेजे। इनपुट डेटा प्रोसेसिंग पूरी होने के बाद, एप्लिकेशन आउटपुट डेटा को वेब सर्वर को भेजता है जो डेटा को HTTP क्लाइंट को अग्रेषित करता है।
उदाहरण के लिए, जब CGI स्क्रिप्ट http://mysitename.com/cgi-bin/file.pl तक पहुँचते हैं, तो सर्वर CGI के माध्यम से उपयुक्त पर्ल एप्लिकेशन को चलाएगा। स्क्रिप्ट निष्पादन से उत्पन्न डेटा एप्लिकेशन द्वारा वेब सर्वर को भेजा जाएगा। दूसरी ओर, सर्वर डेटा को ब्राउज़र में स्थानांतरित करेगा। यदि सर्वर में CGI नहीं होता, तो ब्राउज़र .pl फ़ाइल कोड को स्वयं प्रदर्शित करता। (व्याख्या यहाँ से)
FastCGI
FastCGI एक नई वेब तकनीक है, जो एक सुधारित CGI संस्करण है क्योंकि मुख्य कार्यक्षमता समान रहती है।
FastCGI विकसित करने की आवश्यकता यह है कि वेब एप्लिकेशनों के तेजी से विकास और जटिलता के कारण उत्पन्न हुआ, साथ ही CGI तकनीक की स्केलेबिलिटी की कमियों को दूर करने के लिए। इन आवश्यकताओं को पूरा करने के लिए Open Market ने FastCGI – CGI तकनीक का एक उच्च प्रदर्शन संस्करण जो उन्नत क्षमताओं के साथ है, पेश किया।
disable_functions bypass
यह संभव है कि PHP कोड को FastCGI का दुरुपयोग करके चलाया जाए और disable_functions सीमाओं से बचा जाए।
Via Gopherus
I'm not sure if this is working in modern versions because I tried once and it didn't execute anything. Please, if you have more information about this contact me via [PEASS & HackTricks telegram group here](https://t.me/peass), or twitter [@carlospolopm](https://twitter.com/hacktricks_live).
Using Gopherus you can generate a payload to send to the FastCGI listener and execute arbitrary commands:
Uploading and accessing this script the exploit is going to be sent to FastCGI (disabling disable_functions) and the निर्धारित कमांड निष्पादित किए जाएंगे.
PHP exploit
I'm not sure if this is working in modern versions because I tried once and I couldn't execute anything. Actually I managed to see that phpinfo() from FastCGI execution indicated that disable_functions was empty, but PHP (somehow) was still preventing me from executing any previously disabled function. Please, if you have more information about this contact me via [PEASS & HackTricks telegram group here](https://t.me/peass), or twitter [@carlospolopm](https://twitter.com/hacktricks_live).
This is a php script to exploit fastcgi protocol to bypass open_basedir and disable_functions.
It will help you to bypass strict disable_functions to RCE by loading the malicious extension.
You can access it here: https://github.com/w181496/FuckFastcgi or a sligtly modified and improved version here: https://github.com/BorelEnzo/FuckFastcgi
You will find that the exploit is very similar to the previous code, but instead of trying to bypass disable_functions using PHP_VALUE, it tries to load an external PHP module to execute code using the parameters extension_dir and extension inside the variable PHP_ADMIN_VALUE.
NOTE1: You probably will need to recompile the extension with the same PHP version that the server is using (you can check it inside the output of phpinfo):
NOTE2: मैंने इसे extension_dir और extension मानों को PHP .ini कॉन्फ़िग फ़ाइल में डालकर काम करने में सफल रहा (कुछ ऐसा जो आप सर्वर पर हमला करते समय नहीं कर पाएंगे)। लेकिन किसी कारण से, जब इस एक्सप्लॉइट का उपयोग करते हुए और PHP_ADMIN_VALUE वेरिएबल से एक्सटेंशन लोड करते हुए प्रक्रिया बस मर गई, इसलिए मुझे नहीं पता कि यह तकनीक अभी भी मान्य है।