disable_functions bypass - dl function

Support HackTricks

Важлива примітка:

image

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 для виконання системних команд.

Кроки, які вживає зловмисник:

  1. Ідентифікація версії PHP:

  • Зловмисник визначає версію PHP за допомогою скрипта (<?php echo 'PHP Version is '.PHP_VERSION; ?>).

  1. Отримання виходу PHP:

  1. Налаштування локального PHP:

  • Розпаковує та встановлює конкретну версію PHP на своєму комп'ютері.

  1. Створення розширення:

  • Вивчає створення розширень PHP та перевіряє вихідний код PHP.

  • Зосереджується на дублюванні функціональності функції exec, розташованої в ext/standard/exec.c.

Примітки для компіляції власного розширення:

  1. ZEND_MODULE_API_NO:

  • ZEND_MODULE_API_NO у bypass.c повинен відповідати поточній збірці Zend Extension, яку можна отримати за допомогою:

php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
  1. Модифікація PHP_FUNCTION:

  • Для останніх версій PHP (5, 7, 8) може знадобитися коригування PHP_FUNCTION(bypass_exec). Наведений фрагмент коду детально описує цю модифікацію.

Файли власного розширення:

  • bypass.c:

  • Реалізує основну функціональність власного розширення.

  • php_bypass.h:

  • Заголовний файл, що визначає властивості розширення.

  • config.m4:

  • Використовується phpize для налаштування середовища збірки для власного розширення.

Збірка розширення:

  1. Команди компіляції:

  • Використовує phpize, ./configure та make для компіляції розширення.

  • Результуючий bypass.so потім розташовується в підкаталозі модулів.

  1. Очищення:

  • Виконує make clean та phpize --clean після компіляції.

Завантаження та виконання на хості жертви:

  1. Сумісність версій:

  • Переконується, що версії API PHP збігаються між системами зловмисника та жертви.

  1. Завантаження розширення:

  • Використовує функцію dl, обходячи обмеження, використовуючи відносні шляхи або скрипт для автоматизації процесу.

  1. Виконання скрипта:

  • Зловмисник завантажує bypass.so та PHP-скрипт на сервер жертви.

  • Скрипт використовує функцію dl_local для динамічного завантаження bypass.so, а потім викликає bypass_exec з командою, переданою через параметр запиту cmd.

Виконання команд:

  • Тепер зловмисник може виконувати команди, звертаючись до: http://www.example.com/script.php?cmd=<command>

Цей детальний опис викладає процес створення та розгортання розширення PHP для виконання системних команд, експлуатуючи функцію dl, яка, в ідеалі, повинна бути вимкнена, щоб запобігти таким порушенням безпеки.

Support HackTricks

Last updated