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