PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Це, по суті, резюме https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
Вступ
Створення нових довільних об'єктів, таких як new $_GET["a"]($_GET["a"])
, може призвести до віддаленого виконання коду (RCE), як детально описано в статті. Цей документ підкреслює різні стратегії для досягнення RCE.
RCE через користувацькі класи або автозавантаження
Синтаксис new $a($b)
використовується для створення об'єкта, де $a
представляє ім'я класу, а $b
є першим аргументом, переданим конструктору. Ці змінні можуть бути отримані з введення користувача, як GET/POST, де вони можуть бути рядками або масивами, або з JSON, де вони можуть представлятися як інші типи.
Розгляньте фрагмент коду нижче:
У цьому випадку, встановлення $a
на App
або App2
і $b
на системну команду (наприклад, uname -a
) призводить до виконання цієї команди.
Функції автозавантаження можуть бути використані, якщо такі класи не є безпосередньо доступними. Ці функції автоматично завантажують класи з файлів за потреби і визначаються за допомогою spl_autoload_register
або __autoload
:
Поведение автозагрузки варіюється в залежності від версій PHP, пропонуючи різні можливості RCE.
RCE через вбудовані класи
Відсутність користувацьких класів або автозагрузчиків, вбудовані класи PHP можуть бути достатніми для RCE. Кількість цих класів коливається від 100 до 200, залежно від версії PHP та розширень. Їх можна перерахувати за допомогою get_declared_classes()
.
Конструктори, що представляють інтерес, можна ідентифікувати через API рефлексії, як показано в наступному прикладі та за посиланням https://3v4l.org/2JEGF.
RCE через специфічні методи включає:
SSRF + Phar десеріалізація
Клас SplFileObject
дозволяє SSRF через свій конструктор, що дозволяє підключення до будь-якого URL:
SSRF може призвести до атак десеріалізації в версіях PHP до 8.0, використовуючи протокол Phar.
Експлуатація PDO
Конструктор класу PDO дозволяє підключення до баз даних через рядки DSN, що потенційно дозволяє створення файлів або інші взаємодії:
SoapClient/SimpleXMLElement XXE
Версії PHP до 5.3.22 та 5.4.12 були вразливими до атак XXE через конструктори SoapClient
та SimpleXMLElement
, залежно від версії libxml2.
RCE через розширення Imagick
У процесі аналізу залежностей проєкту було виявлено, що Imagick може бути використаний для виконання команд шляхом створення нових об'єктів. Це створює можливість для експлуатації вразливостей.
VID парсер
Було виявлено, що можливість VID парсера записувати вміст у будь-який вказаний шлях у файловій системі. Це може призвести до розміщення PHP shell у веб-доступному каталозі, досягаючи віддаленого виконання коду (RCE).
VID Parser + Завантаження файлів
Зазначено, що PHP тимчасово зберігає завантажені файли в /tmp/phpXXXXXX
. VID парсер в Imagick, використовуючи протокол msl, може обробляти шаблони в шляхах до файлів, що полегшує передачу тимчасового файлу до вибраного місця. Цей метод пропонує додатковий підхід для досягнення довільного запису файлів у файловій системі.
PHP Збій + Брутфорс
Метод, описаний у оригінальному звіті, передбачає завантаження файлів, які викликають збій сервера перед видаленням. За допомогою брутфорсу імені тимчасового файлу, Imagick може виконувати довільний PHP код. Однак цей метод виявився ефективним лише в застарілій версії ImageMagick.
Посилання
Last updated