disable_functions bypass - dl function

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

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

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

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

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

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

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

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

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

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

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

  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. Сумісність версій:

  • Забезпечує відповідність версій PHP API між системами зловмисника та жертви.

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

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

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

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

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

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

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

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

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated