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:
Експлуатація PDOs
Конструктор класу PDO дозволяє підключатися до баз даних за допомогою рядків DSN, що потенційно дозволяє створювати файли або здійснювати інші взаємодії:
SoapClient/SimpleXMLElement XXE
Версії PHP до 5.3.22 та 5.4.12 були вразливі до атак XXE через конструктори SoapClient
та SimpleXMLElement
, залежно від версії libxml2.
RCE через розширення Imagick
Під час аналізу залежностей проекту було виявлено, що Imagick може бути використаний для виконання команд шляхом створення нових об'єктів. Це відкриває можливість використання вразливостей.
Аналізатор VID
Була виявлена можливість аналізатора VID записувати вміст у будь-який вказаний шлях у файловій системі. Це може призвести до розміщення PHP оболонки в каталозі, до якого є доступ через веб, досягаючи віддаленого виконання коду (RCE).
Аналізатор VID + Завантаження файлів
Зауважено, що PHP тимчасово зберігає завантажені файли в /tmp/phpXXXXXX
. Аналізатор VID в Imagick, використовуючи протокол msl, може обробляти шаблони в шляхах до файлів, сприяючи передачі тимчасового файлу в обране місце. Цей метод пропонує додатковий підхід для досягнення довільного запису файлів у файловій системі.
Падіння PHP + Брутфорс
Метод, описаний у початковому описі, передбачає завантаження файлів, які спричиняють падіння сервера перед видаленням. Шляхом брутфорсу назви тимчасового файлу стає можливим для Imagick виконання довільного PHP коду. Однак цей метод виявився ефективним лише в застарілій версії ImageMagick.
Посилання
Last updated