disable_functions bypass - dl function
Важлива примітка:
dl
- це функція PHP, яку можна використовувати для завантаження PHP-розширень. Якщо функція не відключена, її можна використовувати для обхіду disable_functions
та виконання довільних команд.
Проте вона має деякі строгі обмеження:
Функція
dl
повинна бути присутня в середовищі і не відключенаРозширення PHP повинно бути скомпільоване з тією ж основною версією (версією PHP API), яку використовує сервер (цю інформацію можна побачити в виводі 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 - '.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
після компіляції.
Завантаження та виконання на хості жертви:
Сумісність версій:
Забезпечує відповідність версій PHP API між системами зловмисника та жертви.
Завантаження розширення:
Використовує функцію
dl
, обхід обмежень за допомогою відносних шляхів або скрипту для автоматизації процесу.
Виконання скрипта:
Зловмисник завантажує
bypass.so
та PHP-скрипт на сервер жертви.Скрипт використовує функцію
dl_local
для динамічного завантаженняbypass.so
, а потім викликаєbypass_exec
з командою, переданою через параметр запитуcmd
.
Виконання команд:
Зловмисник тепер може виконувати команди, звертаючись за адресою:
http://www.example.com/script.php?cmd=<команда>
Цей детальний опис процесу створення та розгортання PHP-розширення для виконання системних команд, використовуючи функцію dl
, яка в ідеалі повинна бути відключена для запобігання таким порушенням безпеки.
Last updated