PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Ovo je u suštini sažetak https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
Uvod
Kreiranje novih proizvoljnih objekata, kao što je new $_GET["a"]($_GET["a"])
, može dovesti do Remote Code Execution (RCE), kako je detaljno opisano u writeup-u. Ovaj dokument ističe različite strategije za postizanje RCE.
RCE putem prilagođenih klasa ili automatskog učitavanja
Sintaksa new $a($b)
se koristi za instanciranje objekta gde $a
predstavlja ime klase, a $b
je prvi argument prosleđen konstruktoru. Ove promenljive mogu biti dobijene iz korisničkih unosa kao što su GET/POST, gde mogu biti stringovi ili nizovi, ili iz JSON-a, gde se mogu pojaviti kao druge vrste.
Razmotrite kod ispod:
U ovom slučaju, postavljanje $a
na App
ili App2
i $b
na sistemsku komandu (npr., uname -a
) rezultira izvršavanjem te komande.
Autoloading funkcije mogu biti iskorišćene ako takve klase nisu direktno dostupne. Ove funkcije automatski učitavaju klase iz fajlova kada su potrebne i definišu se koristeći spl_autoload_register
ili __autoload
:
Ponašanje automatskog učitavanja varira sa verzijama PHP-a, nudeći različite RCE mogućnosti.
RCE putem ugrađenih klasa
U nedostatku prilagođenih klasa ili automatskih učitavača, ugrađene PHP klase mogu biti dovoljne za RCE. Broj ovih klasa kreće se između 100 i 200, u zavisnosti od verzije PHP-a i ekstenzija. Mogu se nabrojati koristeći get_declared_classes()
.
Konstruktori od interesa mogu se identifikovati putem refleksije API-ja, kao što je prikazano u sledećem primeru i linku https://3v4l.org/2JEGF.
RCE putem specifičnih metoda uključuje:
SSRF + Phar deserializacija
Klasa SplFileObject
omogućava SSRF kroz svoj konstruktor, omogućavajući veze sa bilo kojim URL-om:
SSRF može dovesti do napada deserializacije u verzijama PHP-a pre 8.0 koristeći Phar protokol.
Iskorišćavanje PDO-a
Konstruktor klase PDO omogućava povezivanje sa bazama podataka putem DSN stringova, potencijalno omogućavajući kreiranje fajlova ili druge interakcije:
SoapClient/SimpleXMLElement XXE
Verzije PHP-a do 5.3.22 i 5.4.12 bile su podložne XXE napadima putem SoapClient
i SimpleXMLElement
konstruktora, u zavisnosti od verzije libxml2.
RCE putem Imagick ekstenzije
U analizi zavisnosti projekta, otkriveno je da se Imagick može iskoristiti za izvršavanje komandi instanciranjem novih objekata. Ovo predstavlja priliku za iskorišćavanje ranjivosti.
VID parser
Identifikovana je sposobnost VID parsera da piše sadržaj na bilo koju određenu putanju u datotečnom sistemu. To može dovesti do postavljanja PHP shelle u direktorijum koji je dostupan putem veba, ostvarujući Remote Code Execution (RCE).
VID Parser + Upload fajlova
Napomenuto je da PHP privremeno skladišti otpremljene fajlove u /tmp/phpXXXXXX
. VID parser u Imagick-u, koristeći msl protokol, može obraditi džoker znakove u putanjama fajlova, olakšavajući prenos privremenog fajla na odabrano mesto. Ova metoda nudi dodatni pristup za postizanje proizvoljnog pisanja fajlova unutar datotečnog sistema.
PHP Crash + Brute Force
Metoda opisana u originalnom izveštaju uključuje otpremanje fajlova koji izazivaju pad servera pre brisanja. Primenom brute force-a na ime privremenog fajla, postaje moguće da Imagick izvrši proizvoljan PHP kod. Međutim, ova tehnika se pokazala efikasnom samo u zastareloj verziji ImageMagick-a.
Reference
Last updated