Podziel się sztuczkami hackingowymi, przesyłając PR-y doHackTricks i HackTricks Cloud repozytoriów github.
PHP-FPM
PHP-FPM jest przedstawiane jako lepsza alternatywa dla standardowego PHP FastCGI, oferując funkcje, które są szczególnie korzystne dla stron internetowych o dużym ruchu. Działa poprzez proces główny, który nadzoruje zbiór procesów roboczych. W przypadku żądania skryptu PHP, to serwer WWW inicjuje połączenie proxy FastCGI z usługą PHP-FPM. Usługa ta ma zdolność odbierania żądań zarówno przez porty sieciowe na serwerze, jak i przez gniazda Unix.
Pomimo pośredniczącej roli połączenia proxy, PHP-FPM musi działać na tej samej maszynie co serwer WWW. Połączenie, którego używa, chociaż oparte na proxy, różni się od konwencjonalnych połączeń proxy. Po odebraniu żądania, dostępny pracownik z PHP-FPM przetwarza je—wykonując skrypt PHP, a następnie przesyłając wyniki z powrotem do serwera WWW. Po zakończeniu przetwarzania żądania przez pracownika, staje się on ponownie dostępny dla nadchodzących żądań.
Ale co to jest CGI i FastCGI?
CGI
Normalnie strony internetowe, pliki i wszystkie dokumenty, które są przesyłane z serwera WWW do przeglądarki, są przechowywane w określonym publicznym katalogu, takim jak home/user/public_html. Gdy przeglądarka żąda określonej zawartości, serwer sprawdza ten katalog i wysyła wymagany plik do przeglądarki.
Jeśli CGI jest zainstalowane na serwerze, dodawany jest również określony katalog cgi-bin, na przykład home/user/public_html/cgi-bin. Skrypty CGI są przechowywane w tym katalogu. Każdy plik w katalogu jest traktowany jako program wykonywalny. Gdy uzyskuje się dostęp do skryptu z katalogu, serwer wysyła żądanie do aplikacji odpowiedzialnej za ten skrypt, zamiast wysyłać zawartość pliku do przeglądarki. Po zakończeniu przetwarzania danych wejściowych, aplikacja wysyła dane wyjściowe do serwera WWW, który przesyła dane do klienta HTTP.
Na przykład, gdy uzyskuje się dostęp do skryptu CGI http://mysitename.com/cgi-bin/file.pl, serwer uruchomi odpowiednią aplikację Perl przez CGI. Dane generowane z wykonania skryptu będą przesyłane przez aplikację do serwera WWW. Serwer z kolei przekaże dane do przeglądarki. Gdyby serwer nie miał CGI, przeglądarka wyświetliłaby kod pliku .pl. (wyjaśnienie z tutaj)
FastCGI
FastCGI to nowsza technologia internetowa, ulepszona wersja CGI, ponieważ główna funkcjonalność pozostaje ta sama.
Potrzeba opracowania FastCGI wynika z szybkiego rozwoju i złożoności aplikacji w Internecie, a także z potrzeby rozwiązania problemów ze skalowalnością technologii CGI. Aby sprostać tym wymaganiom, Open Market wprowadził FastCGI – wersję CGI o wysokiej wydajności z ulepszonymi możliwościami.
disable_functions bypass
Możliwe jest uruchomienie kodu PHP, wykorzystując FastCGI i omijając ograniczenia disable_functions.
Via Gopherus
Nie jestem pewien, czy to działa w nowoczesnych wersjach, ponieważ próbowałem raz i nic się nie wykonało. Proszę, jeśli masz więcej informacji na ten temat, skontaktuj się ze mną przez [grupę telegramową PEASS & HackTricks tutaj](https://t.me/peass), lub twitter [@carlospolopm](https://twitter.com/hacktricks_live).
Używając Gopherus, możesz wygenerować ładunek do wysłania do nasłuchującego FastCGI i wykonać dowolne polecenia:
Uploading and accessing this script exploit zostanie wysłany do FastCGI (wyłączając disable_functions) i określone polecenia zostaną wykonane.
PHP exploit
Nie jestem pewien, czy to działa w nowoczesnych wersjach, ponieważ próbowałem raz i nie mogłem nic wykonać. Właściwie udało mi się zobaczyć, że phpinfo() z wykonania FastCGI wskazywało, że disable_functions było puste, ale PHP (jakoś) nadal uniemożliwiało mi wykonanie jakiejkolwiek wcześniej wyłączonej funkcji. Proszę, jeśli masz więcej informacji na ten temat, skontaktuj się ze mną przez [PEASS & HackTricks telegram group here](https://t.me/peass), lub twitter [@carlospolopm](https://twitter.com/hacktricks_live).
To jest skrypt php do wykorzystania protokołu fastcgi w celu obejścia open_basedir i disable_functions.
Pomoże ci to obejść surowe disable_functions do RCE, ładując złośliwe rozszerzenie.
Możesz uzyskać do niego dostęp tutaj: https://github.com/w181496/FuckFastcgi lub nieco zmodyfikowana i ulepszona wersja tutaj: https://github.com/BorelEnzo/FuckFastcgi
Zauważysz, że exploit jest bardzo podobny do poprzedniego kodu, ale zamiast próbować obejść disable_functions używając PHP_VALUE, próbuje załadować zewnętrzny moduł PHP do wykonania kodu, używając parametrów extension_dir i extension wewnątrz zmiennej PHP_ADMIN_VALUE.
UWAGA1: Prawdopodobnie będziesz musiał przecompilować rozszerzenie z tą samą wersją PHP, którą używa serwer (możesz to sprawdzić w wynikach phpinfo):
UWAGA2: Udało mi się to uruchomić, wstawiając wartości extension_dir i extension do pliku konfiguracyjnego PHP .ini (czego nie będziesz w stanie zrobić atakując serwer). Ale z jakiegoś powodu, używając tego exploita i ładując rozszerzenie z zmiennej PHP_ADMIN_VALUE, proces po prostu umarł, więc nie wiem, czy ta technika jest nadal ważna.