Site Network:



If a man does not keep pace
with his companions, perhaps
it is because he hears a
different drummer.

Henry David Thoreau

Bezpečnosť webových aplikácií a Javascript injection

Javascript injection je jednoduchá technika vykonávania príkazov jazyka javascript nad webovými stránkami za rôznorodým účelom. Tento článok sa bude snažiť priblížiť také účely využitia tejto techniky, ktoré môžu byť užitočné pri bezpečnostnom audite stránok a webových aplikácií.

Javascript injekcie zadávame namiesto URL adresy, tj. namiesto http://www.nieco.sk/ je potrebné napísať javascript:alert("hello") a stlačiť klávesu ENTER.

Čo sa stalo? Prehliadač zapísaný javasript spracoval a vyhodil klasické alertové okno s textom, ktorý sme do príkazu vložili. Dôležité je v tomto zvyknúť si na to, že každá injekcia musí začínať textom "javascript:", po ktorom už môže nasledovať konkrétny príkaz v tomto jazyku.

Teraz sa na túto problematiku pozrime trochu hlbšie. Pri otázke, na čo sa dá Javascript injection využiť, sa väčšine ľudí vynorí spojitosť s cookies:
javascript:alert(document.cookie)
Takýto príkaz, napríklad, zobrazí cookie stránky, na ktorej sa práve nachádzame. V cookies už v dnešnej dobe príliš zaujímavé veci nezvyknú byť, no stále platí, že väčšinou nie je ani vždy, ani nikdy..

Meniť hodnoty určitých objektov či parametrov je možné cez klasickú funkciu "javascript:void()".

Ukážeme si to na nasledujúcom príklade:
Predstavme si, že v cookie máme uložený nasledovný text:
user=peter

Zo zdrojových kódov stránky vydedukujeme, že tá sa generuje podľa toho, aké meno je napísané v cookie. Pokiaľ nás teda zaujíma užívateľ "janka", mala by malá zmena v cookie stačiť:
javascript:void(document.cookie="user=janka")

Následnú kontrolu prevedieme použitím predchádzajúcej funckie "alert()":
javascript:alert(document.cookie)

Zmena, ktorú sme si želali teda prebehla v poriadku. Vyššie uvedené zápisy sa pri troche snahy dajú zhrnúť do jedného, ktorý by vyzeral takto:
javascript:void(document.cookie="user=sexi69janka");alert(document.cookie)

Pokiaľ ste z tohto príkladu pochopili základné princípy a fungovanie javascript injection, môžete si pozrieť a preskúmať aj ďalšiu modelovú situáciu:

form action="http://www.niekde.sk/mail.php" method="post"
input type="hidden" name="to" value="niekto@niekde.sk"

Predpokladajme, že ide o prvú "form" v dokumente. To potom znamená, že má poradové číslo 0. Tento fakt môžme overiť použitím nasledovnej injekcie:
javascript:alert(document.forms[0].to.value)

Tento príkaz by mal otvoriť pop-up okno s textom "niekto@niekde.sk", čiže s hodnotou [value] uloženej v premennej "to" vo "form" s poradovým číslom 0.

Predpokladajme ďalej, že na tento mail sa maju poslať nejaké dôverné informácie, ku ktorým by sme sa však chceli dostať my. Ponúka sa nám teda jednoduché použitie funkcie "void()":
javascript:void(document.forms[0].to.value="mojmail@haha.sk")

Prípadne aj s overením takto:
javascript:void(document.forms[0].to.value="mojmail@haha.sk");alert(document.forms[0].to.value)

No a perlička na záver, ktorá Vám môže ušetriť chvílky trápenia so zabudnutým heslom, ktoré máte síce v prehliadači uložené, no vidíte ho iba vo forme hviezdičiek či bodiek:
javascript:void(document.forms[0].password.type="text");alert(document.forms[0].password.type)