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)