PHP-FPM παρουσιάζεται ως μια ανώτερη εναλλακτική της τυπικής PHP FastCGI, προσφέροντας χαρακτηριστικά που είναι ιδιαίτερα ωφέλιμα για ιστοσελίδες με υψηλή επισκεψιμότητα. Λειτουργεί μέσω μιας κύριας διαδικασίας που επιβλέπει μια συλλογή εργατικών διαδικασιών. Για ένα αίτημα PHP script, είναι ο web server που ξεκινά μια σύνδεση FastCGI proxy με την υπηρεσία PHP-FPM. Αυτή η υπηρεσία έχει τη δυνατότητα να λαμβάνει αιτήματα είτε μέσω δικτυακών θυρών στον server είτε μέσω Unix sockets.
Παρά τον ενδιάμεσο ρόλο της σύνδεσης proxy, το PHP-FPM πρέπει να είναι λειτουργικό στην ίδια μηχανή με τον web server. Η σύνδεση που χρησιμοποιεί, αν και βασίζεται σε proxy, διαφέρει από τις συμβατικές συνδέσεις proxy. Μετά την παραλαβή ενός αιτήματος, ένας διαθέσιμος εργαζόμενος από το PHP-FPM το επεξεργάζεται—εκτελώντας το PHP script και στη συνέχεια προωθώντας τα αποτελέσματα πίσω στον web server. Αφού ένας εργαζόμενος ολοκληρώσει την επεξεργασία ενός αιτήματος, γίνεται ξανά διαθέσιμος για επερχόμενα αιτήματα.
Αλλά τι είναι το CGI και το FastCGI;
CGI
Κανονικά, οι ιστοσελίδες, τα αρχεία και όλα τα έγγραφα που μεταφέρονται από τον web server στον browser αποθηκεύονται σε έναν συγκεκριμένο δημόσιο κατάλογο όπως home/user/public_html. Όταν ο browser ζητά συγκεκριμένο περιεχόμενο, ο server ελέγχει αυτόν τον κατάλογο και στέλνει το απαιτούμενο αρχείο στον browser.
Αν CGI είναι εγκατεστημένο στον server, ο συγκεκριμένος κατάλογος cgi-bin προστίθεται επίσης εκεί, για παράδειγμα home/user/public_html/cgi-bin. Τα CGI scripts αποθηκεύονται σε αυτόν τον κατάλογο. Κάθε αρχείο στον κατάλογο αντιμετωπίζεται ως εκτελέσιμο πρόγραμμα. Όταν αποκτάτε πρόσβαση σε ένα script από τον κατάλογο, ο server στέλνει αίτημα στην εφαρμογή, υπεύθυνη για αυτό το script, αντί να στείλει το περιεχόμενο του αρχείου στον browser. Αφού ολοκληρωθεί η επεξεργασία των δεδομένων εισόδου, η εφαρμογή στέλνει τα δεδομένα εξόδου στον web server που προωθεί τα δεδομένα στον HTTP client.
Για παράδειγμα, όταν αποκτάται πρόσβαση στο CGI script http://mysitename.com/cgi-bin/file.pl, ο server θα εκτελέσει την κατάλληλη εφαρμογή Perl μέσω CGI. Τα δεδομένα που παράγονται από την εκτέλεση του script θα σταλούν από την εφαρμογή στον web server. Ο server, από την άλλη πλευρά, θα μεταφέρει τα δεδομένα στον browser. Αν ο server δεν είχε CGI, ο browser θα είχε εμφανίσει τον κώδικα του αρχείου .pl. (εξήγηση από εδώ)
FastCGI
FastCGI είναι μια νεότερη τεχνολογία web, μια βελτιωμένη έκδοση του CGI καθώς η κύρια λειτουργικότητα παραμένει η ίδια.
Η ανάγκη ανάπτυξης του FastCGI προήλθε από την ταχεία ανάπτυξη και πολυπλοκότητα των εφαρμογών, καθώς και για να αντιμετωπιστούν οι ελλείψεις κλιμάκωσης της τεχνολογίας CGI. Για να καλυφθούν αυτές οι απαιτήσεις, Open Market εισήγαγε FastCGI – μια έκδοση υψηλής απόδοσης της τεχνολογίας CGI με ενισχυμένες δυνατότητες.
disable_functions bypass
Είναι δυνατόν να εκτελέσετε κώδικα PHP εκμεταλλευόμενοι το FastCGI και αποφεύγοντας τους περιορισμούς του disable_functions.
Μέσω Gopherus
Δεν είμαι σίγουρος αν αυτό λειτουργεί σε σύγχρονες εκδόσεις γιατί το δοκίμασα μια φορά και δεν εκτέλεσε τίποτα. Παρακαλώ, αν έχετε περισσότερες πληροφορίες σχετικά με αυτό, επικοινωνήστε μαζί μου μέσω [PEASS & HackTricks telegram group εδώ](https://t.me/peass), ή twitter [@carlospolopm](https://twitter.com/hacktricks_live).
Χρησιμοποιώντας Gopherus μπορείτε να δημιουργήσετε ένα payload για να στείλετε στον FastCGI listener και να εκτελέσετε αυθαίρετες εντολές:
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).