disable_functions bypass - dl function
Важлива примітка:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fuser-images.githubusercontent.com%2F84577967%2F174675487-a4c4ca06-194f-4725-85af-231a2f35d56c.png&width=768&dpr=4&quality=100&sign=486a6573&sv=1)
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
, яка, в ідеалі, повинна бути вимкнена, щоб запобігти таким порушенням безпеки.
Last updated