Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs σταHackTricks και HackTricks Cloud αποθετήρια του github.
PHP-FPM
Το PHP-FPM παρουσιάζεται ως μια ανώτερη εναλλακτική λύση στο κανονικό PHP FastCGI, προσφέροντας χαρακτηριστικά που είναι ιδιαίτερα επωφελή για ιστότοπους με υψηλή κίνηση. Λειτουργεί μέσω ενός κύριου διεργασίας που εποπτεύει μια συλλογή από διεργασίες εργαζομένων. Για ένα αίτημα σε ένα PHP script, είναι ο διακομιστής ιστού που ξεκινά μια σύνδεση μεσολάβησης FastCGI στην υπηρεσία PHP-FPM. Αυτή η υπηρεσία έχει τη δυνατότητα να λαμβάνει αιτήσεις είτε μέσω θυρών δικτύου στον διακομιστή είτε μέσω Unix sockets.
Παρά τον μεσολαβητικό ρόλο της σύνδεσης μεσολάβησης, το PHP-FPM πρέπει να είναι λειτουργικό στον ίδιο υπολογιστή με τον διακομιστή ιστού. Η σύνδεση που χρησιμοποιεί, αν και βασίζεται σε μεσολαβητική σύνδεση, διαφέρει από τις συμβατικές μεσολαβητικές συνδέσεις. Μετά τη λήψη μιας αίτησης, ένας διαθέσιμος εργαζόμενος από το PHP-FPM την επεξεργάζεται - εκτελεί το PHP script και στη συνέχεια αποστέλλει τα αποτελέσματα πίσω στον διακομιστή ιστού. Αφού ένας εργαζόμενος ολοκληρώσει την επεξεργασία μιας αίτησης, γίνεται ξανά διαθέσιμος για επερχόμενες αιτήσεις.
Αλλά τι είναι το CGI και το FastCGI;
CGI
Συνήθως οι ιστοσελίδες, τα αρχεία και όλα τα έγγραφα που μεταφέρονται από τον διακομιστή ιστού στον περιηγητή αποθηκεύονται σε ένα συγκεκριμένο δημόσιο κατάλογο, όπως το home/user/public_html. Όταν ο περιηγητής ζητάει συγκεκριμένο περιεχόμενο, ο διακομιστής ελέγχει αυτόν τον κατάλογο και στέλνει το απαιτούμενο αρχείο στον περιηγητή.
Εάν το CGI είναι εγκατεστημένο στον διακομιστή, τότε προστίθεται επίσης ο συγκεκριμένος κατάλογος cgi-bin, για παράδειγμα home/user/public_html/cgi-bin. Τα CGI scripts αποθηκεύονται σε αυτόν τον κατάλογο. Κάθε αρχείο στον κατάλογο θεωρείται ως εκτελέσιμο πρόγραμμα. Όταν προσπελαύνετε ένα script από τον κατάλογο, ο διακομιστής στέλνει αίτηση στην εφαρμογή που είναι υπεύθυνη για αυτό το script, αντί να στέλνει το περιεχόμενο του αρχείου στον περιηγητή. Αφού ολοκληρωθεί η επεξεργασία των εισρεθέντων δεδομένων, η εφαρμογή στέλνει τα δεδομένα εξόδου στον διακομιστή ιστού, ο οποίος με τη σειρά του μεταφέρει τα δεδομένα στον πελάτη HTTP.
Για παράδειγμα, όταν προσπελαύνετε το CGI script http://mysitename.com/cgi-bin/file.pl, ο διακομιστής θα εκτελέσει την κατάλληλη εφαρμογή Perl μέσω CGI. Τα δεδομένα που παράγονται από την εκτέλεση του script θα αποσταλούν από την εφαρμογή στον διακομιστή ιστού. Ο διακομιστής, από την άλλη πλευρά, θα μεταφέρει τα δεδομένα στον περιηγητή. Εάν ο διακομιστής δεν είχε το CGI, ο περιηγητής θα εμφάνιζε τον Στη συνέχεια, μπορείτε να αντλήσετε τον κωδικοποιημένο με urlencoded φορτίο και να το αποκωδικοποιήσετε και να το μετατρέψετε σε base64, χρησιμοποιώντας αυτήν τη συνταγή του cyberchef για παράδειγμα. Και στη συνέχεια αντιγράφετε/επικολλάτε το base64 σε αυτόν τον κώδικα php:
Ανεβάζοντας και αποκτώντας πρόσβαση σε αυτό το σενάριο, η εκμετάλλευση θα αποσταλεί στο FastCGI (απενεργοποιώντας την disable_functions) και θα εκτελεστούν οι καθορισμένες εντολές.
Εκμετάλλευση PHP
Δεν είμαι σίγουρος αν αυτό λειτουργεί σε σύγχρονες εκδόσεις, γιατί προσπάθησα μία φορά και δεν μπόρεσα να εκτελέσω τίποτα. Πραγματικά κατάφερα να δω ότι η phpinfo() από την εκτέλεση του FastCGI έδειχνε ότι η disable_functions ήταν άδεια, αλλά το PHP (κάπως) εξακολουθούσε να με εμποδίζει από την εκτέλεση οποιασδήποτε προηγουμένως απενεργοποιημένης λειτουργίας. Παρακαλώ, αν έχετε περισσότερες πληροφορίες σχετικά με αυτό, επικοινωνήστε μαζί μου μέσω του [PEASS & HackTricks telegram group εδώ](https://t.me/peass), ή στο twitter [@carlospolopm](https://twitter.com/hacktricks_live).
Χρησιμοποιώντας την προηγούμενη συνάρτηση θα δείτε ότι η συνάρτηση system είναι ακόμα απενεργοποιημένη αλλά το phpinfo() δείχνει ότι η ρύθμιση disable_functions είναι άδεια:
Έτσι, νομίζω ότι μπορείτε να ορίσετε το disable_functions μόνο μέσω των αρχείων ρυθμίσεων .ini του php και η τιμή του PHP_VALUE δεν θα αντικαταστήσει αυτή τη ρύθμιση.
Αυτό είναι ένα php script για εκμετάλλευση του πρωτοκόλλου fastcgi για να παρακάμψετε το open_basedir και το disable_functions.
Θα σας βοηθήσει να παρακάμψετε το αυστηρό disable_functions για RCE φορτώνοντας την κακόβουλη επέκταση.
Μπορείτε να το βρείτε εδώ: https://github.com/w181496/FuckFastcgi ή μια ελαφρώς τροποποιημένη και βελτιωμένη έκδοση εδώ: https://github.com/BorelEnzo/FuckFastcgi
Θα διαπιστώσετε ότι η εκμετάλλευση είναι πολύ παρόμοια με τον προηγούμενο κώδικα, αλλά αντί να προσπαθεί να παρακάμψει το disable_functions χρησιμοποιώντας το PHP_VALUE, προσπαθεί να φορτώσει μια εξωτερική PHP επέκταση για να εκτελέσει κώδικα χρησιμοποιώντας τις παραμέτρους extension_dir και extension μέσα στη μεταβλητή PHP_ADMIN_VALUE.
ΣΗΜΕΙΩΣΗ1: Πιθανόν να χρειαστεί να επαναμεταγλωττίσετε την επέκταση με την ίδια έκδοση PHP που χρησιμοποιεί ο διακομιστής (μπορείτε να το ελέγξετε στην έξοδο του phpinfo):
ΣΗΜΕΙΩΣΗ2: Κατάφερα να το κάνω να λειτουργήσει εισάγοντας τις τιμές extension_dir και extension μέσα σε ένα αρχείο ρυθμίσεων PHP .ini (κάτι που δεν θα μπορέσετε να κάνετε επιτίθεμενοι σε έναν διακομιστή). Ωστόσο, για κάποιο λόγο, όταν χρησιμοποιώ αυτήν την εκμετάλλευση και φορτώνω την επέκταση από τη μεταβλητή PHP_ADMIN_VALUE, η διαδικασία απλά τερματίζεται, οπότε δεν ξέρω αν αυτή η τεχνική είναι ακόμα έγκυρη.