Author: MDT | Added:17.4.2007 23:07 | Last update: 10.5.2007 00:15 | Readed: 2096x
Tak dnes pokračujeme dal?ími metodami, jak vyu?ít PHP injection. Dnes si uká?eme, jak je?tě jinak mů?e být vlo?en soubor pomocí funkce include() a jak obejít vypnutou funkci allow_url_fopen().
Pro pochopení, o čem se bavím, si přečtěte první část mého článku o PHP Injection.
Opět zkou?íme nějaký vymy?leý soubor (například bububu.php) do adresy
http://www.server_obeti.cz/index.php?page=bububu.php
a kontrolujeme errory:
3) Warning: main(./bububu.php)... Kód pak obsahuje něco takového:
To je zlé, proto?e kvůli ?./? mů?eme vkládat soubory jen z lokálního serveru, ne z cizího, tak?e ani povolená funkce allow_url_fopen() nám nepomů?e. Jak tedy na to?
Tady u? začíná jít do tuhého. Logicky, pokud jdou vkládat jen soubory z lokálního serveru, tak si musíte zařídit web na stejném serveru. Problém je ale v tom, ?e daný server mů?e nabízet různé typy webhostingů, pro různé typy mů?e mít různé servery nebo disky a pokud nás dají na jiný server nebo disk, máme smůlu. Proto se musíme sna?ít mít stejný typ webhostingu, jako obě?, nebo se alespoň co nejvíc přiblí?it. To, jaký typ webhostingu obět se pokusíme zjistit prolézáním stránek, fóra, článku atd. na daném webu. Kdy? u? máme teda v?echno připravené (web který se typem webhostingu co nejvíce podobá webu oběti), mů?eme zahájit pokus o útok. Útok provedeme pomocí tzv. session, které jednodu?e řečeno slou?í jako dočasné ulo?i?tě dat, které si pak později mů?eme vy?ádat. Kód bude vypadat nějak takto:
session_save_path() je funkce pro vybrání absolutní cesty, kam chceme soubor ulo?it. Absolutní cestu zjistíte díky funkci phpinfo(), kde také zjistíte dal?í spoustu u?itečných informacé (jestli je povolena funkce allow_url_fopen(), jeste je zapnutý safe_mode atd.) session_id() je funkce k pojmenování na?eho souboru, ov?em mů?eme pou?ívat jen písmena a číslice, nemů?eme tedy pou?it tečku a pojmenovat soubor session.php. Před název souboru je také doplněnen prefix sess_ tak?e se soubor nakonec jmenuje sess_session. Session_start() slou?í k vytvoření souboru, do proměné $content pak ulo?íme co má soubor obsahovat (show_source() slou?í k zobrazení kódu, unlink k pak vymazání souboru sess_session (nevyma?e se automaticky)). POZOR! Soubor musí končít // (komentář) a nepí?e se záverečné ?>. $_SESSION[] pak zapí?e obsah proměné $content do souboru. Pak u? jen spustíme script a do url napí?eeme:
http://www.web_obeti.xx/index.php?page=sess_session
a měli bysme vidět kód. Jak prosté. Pokud je ov?em na serveru zakázáno ukládat do v?ech slo?ek, mů?ete soubor sess_session ulo?it do sdíleného adresáře, kam mů?ou zapisovat v?ichni u?ivatelé (například /tmp, zjistíte ho pomocí direktivy open_basedir). Pak jen do URL napí?ete něco takového:
http://www.web_obeti.xx/index.php?page=../../../../../tmp/sess_session
a mělo by to být v pohodě. Kolik máte vlo?it ../ si spočítejte nebo to napi?te 5x 6x a máte to.
4) Warning: main(./bububu.php.php)... Kód pak vypadaá asi takto:
Session pou?ít nemů?eme, důvod jsem popsal vý?e. Mů?eme ale vyu?ít funkce tempnam() která nam vytvoří soubor ve sdíleném adresáři, a my mů?eme určit, jak se soubor bude jmenovat (narozdíl od session). Kód bude vypadat asi takto:
Funkce tempnam má dva parametry, první je cesta, tu nechte prázdnou a druhý je název souboru, který se má vytvořit. K souboru se je?tě připojí 6 místný kód slo?ený z písmen a číslic, tak?e se soubor nakonec jmenuje třeba hack.phpQsD4s7, av?ak v posledním řádku kódu soubor přejmenujeme zpátky na hack.php. Myslím ?e zbytek funkce je jasný, akorát u write si v?imněte ?e opět chybí ukončovací ?>. Do adresy pak napí?eme:
http://www.server_obeti.xx/index.php?page=../../../../../../tmp/hack
A mělo by v?e fungovat.
Celkově je ale mo?né se vám útok nepodaří vůbec ?ádnou metodou. Buď je pou?ita funkce switch(), vstup mů?e být o?etřen od ../ nebo sess_ a podobně. To vám pak ?ádná metoda nepomů?e.
Tak snad je v?echno v pořádku. Metod určitě existuje mnohem víc, já bych chtěl nakonec poděkovat Emkeovi, autorovi článku o PHP Injection na serveru www.soom.cz za některé metody, které jsem se naučil od něho.
-------------------------------------------------------------------------------------------------------------------------