disable_functions bypass - dl function
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Важлива примітка:
dl
— це функція PHP, яка може бути використана для завантаження розширень PHP. Якщо функція не вимкнена, її можна зловживати для обходу disable_functions
та виконання довільних команд.
Однак, вона має деякі суворі обмеження:
Функція dl
повинна бути присутня в середовищі і не вимкнена
Розширення PHP повинно бути скомпільоване з тією ж основною версією (версія API PHP), яку використовує сервер (цю інформацію можна побачити в результатах phpinfo)
Розширення PHP повинно бути розташоване в каталозі, який визначений директивою extension_dir
(це можна побачити в результатах phpinfo). Дуже малоймовірно, що зловмисник, який намагається зловживати сервером, матиме доступ на запис до цього каталогу, тому ця вимога, ймовірно, завадить вам зловживати цією технікою).
Якщо ви відповідаєте цим вимогам, продовжуйте читати пост https://antichat.com/threads/70763/ щоб дізнатися, як обійти disable_functions. Ось короткий виклад:
Функція dl використовується для динамічного завантаження розширень PHP під час виконання скрипта. Розширення PHP, зазвичай написані на C/C++, розширюють функціональність PHP. Зловмисник, помітивши, що функція dl
не вимкнена, вирішує створити власне розширення PHP для виконання системних команд.
Ідентифікація версії PHP:
Зловмисник визначає версію PHP за допомогою скрипта (<?php echo 'PHP Version is '.PHP_VERSION; ?>
).
Отримання виходу PHP:
Завантажує вихід PHP з офіційного вебсайту PHP або з архіву, якщо версія старіша.
Налаштування локального PHP:
Розпаковує та встановлює конкретну версію PHP на своєму комп'ютері.
Створення розширення:
Вивчає створення розширень PHP та перевіряє вихідний код PHP.
Зосереджується на дублюванні функціональності функції exec, розташованої в ext/standard/exec.c
.
ZEND_MODULE_API_NO:
ZEND_MODULE_API_NO
у bypass.c
повинен відповідати поточній збірці Zend Extension, яку можна отримати за допомогою:
Модифікація PHP_FUNCTION:
Для останніх версій PHP (5, 7, 8) може знадобитися коригування PHP_FUNCTION(bypass_exec)
. Наведений фрагмент коду детально описує цю модифікацію.
bypass.c:
Реалізує основну функціональність власного розширення.
php_bypass.h:
Заголовний файл, що визначає властивості розширення.
config.m4:
Використовується phpize
для налаштування середовища збірки для власного розширення.
Команди компіляції:
Використовує phpize
, ./configure
та make
для компіляції розширення.
Результуючий bypass.so
потім розташовується в підкаталозі модулів.
Очищення:
Виконує make clean
та phpize --clean
після компіляції.
Сумісність версій:
Переконується, що версії API PHP збігаються між системами зловмисника та жертви.
Завантаження розширення:
Використовує функцію dl
, обходячи обмеження, використовуючи відносні шляхи або скрипт для автоматизації процесу.
Виконання скрипта:
Зловмисник завантажує bypass.so
та PHP-скрипт на сервер жертви.
Скрипт використовує функцію dl_local
для динамічного завантаження bypass.so
, а потім викликає bypass_exec
з командою, переданою через параметр запиту cmd
.
Тепер зловмисник може виконувати команди, звертаючись до: http://www.example.com/script.php?cmd=<command>
Цей детальний опис викладає процес створення та розгортання розширення PHP для виконання системних команд, експлуатуючи функцію dl
, яка, в ідеалі, повинна бути вимкнена, щоб запобігти таким порушенням безпеки.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)