Поділіться своїми хакерськими трюками, надсилайте PR доHackTricksтаHackTricks Cloudрепозиторіїв на GitHub.
PHP-FPM
PHP-FPM представлений як вищезазначена альтернатива стандартному PHP FastCGI, пропонуючи функції, які особливо корисні для веб-сайтів з високим трафіком. Він працює через майстер-процес, який контролює колекцію робочих процесів. Для запиту сценарію PHP це веб-сервер ініціює проксі-з'єднання FastCGI до служби PHP-FPM. Ця служба має можливість отримувати запити або через мережеві порти на сервері, або через Unix-сокети.
Незважаючи на посередницьку роль проксі-з'єднання, PHP-FPM повинен бути функціональним на тому ж комп'ютері, що й веб-сервер. Використовуване з'єднання, хоча й базується на проксі, відрізняється від звичайних проксі-з'єднань. Після отримання запиту доступний робочий процес з PHP-FPM обробляє його - виконуючи сценарій PHP, а потім пересилаючи результати назад на веб-сервер. Після завершення обробки запиту робочий процес стає доступним для майбутніх запитів.
Але що таке CGI та 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 звертається, сервер запустить відповідний Perl додаток через CGI. Дані, згенеровані в результаті виконання сценарію, будуть відправлені додатком на веб-сервер. Сервер, з іншого боку, передасть дані браузеру. Якби на сервері не було CGI, браузер відобразив би сам код файлу .pl. (пояснення з тут)
FastCGI
FastCGI - це новітня веб-технологія, покращена версія CGI, оскільки основна функціональність залишається такою ж.
Потреба у розробці FastCGI виникла через швидкий розвиток та складність застосунків у вебі, а також для вирішення недоліків масштабовності технології CGI. Для відповіді на ці вимоги Open Market представив FastCGI - високопродуктивну версію технології CGI з покращеними можливостями.
Обхід функцій disable_functions
Можливо виконати PHP-код, зловживаючи FastCGI та уникнувши обмежень disable_functions.
Через Gopherus
Я не впевнений, чи це працює в сучасних версіях, оскільки я спробував один раз і нічого не виконалося. Будь ласка, якщо у вас є більше інформації про це, зв'яжіться зі мною через [групу telegram PEASS & HackTricks тут](https://t.me/peass), або через Twitter [@carlospolopm](https://twitter.com/hacktricks_live).
Використовуючи Gopherus, ви можете створити полезне навантаження для відправки до слухача FastCGI та виконання довільних команд:
Я не впевнений, чи це працює в сучасних версіях, оскільки я спробував один раз і не міг виконати нічого. Фактично, мені вдалося побачити, що phpinfo() з виконанням FastCGI вказував на те, що disable_functions був порожнім, але PHP (якось) все ще заважав мені виконувати будь-яку раніше відключену функцію. Будь ласка, якщо у вас є більше інформації про це, зв'яжіться зі мною через [групу телеграму PEASS & HackTricks тут](https://t.me/peass), або Twitter [@carlospolopm](https://twitter.com/hacktricks_live)**.
Це php-скрипт для експлуатації протоколу 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, процес просто припинився, тому я не знаю, чи ця техніка все ще актуальна.
Вразливість на віддалене виконання коду PHP-FPM (CVE-2019–11043)