PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Last updated
Last updated
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ovo je u suštini sažetak https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
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.
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.
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:
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.
Konstruktor klase PDO omogućava povezivanje sa bazama podataka putem DSN stringova, potencijalno omogućavajući kreiranje fajlova ili druge interakcije:
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.
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.
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).
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.
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.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)