A Cross Site Scripting (továbbiakban XSS)/link talán az egyik legtöbbször elkövetett fejlesztői hiba. Pedig a megtalálása általában egyszerű, bár akadnak bonyolultabb esetek is.

Nézzünk egy közepesen látogatott weboldalt. Az oldalt nem nevezem meg, mert a hibát még nem javították.

Keresés funkció az oldalon

Az oldal kereső mezőjébe írjunk be valamit (ha lehet, akkor olyan kifejezést, ami biztosan nem található az oldalon), pl azt hogy xss. xss_search1

Ezen az oldalon, a keresés eredménye nem adott vissza semmit csak egy üres részt a találatok helyén. Se azt hogy nincs találat, se azt hogy van. Tekintsük meg az oldal forráskódját (CTRL+U) és keressük meg benne a xss kifejezésünket.

<div id="content_search">
 <form action="/kereses" method="get">
 <input type="text" name="search" class="input" value="xss" placeholder="Keresőszó"><input class="submit" type="submit" name="submit" value="Keresés">
 </form>
</div>

Meg is van, az input form value értéke tartalmazza a keresési kifejezésünket. Most próbáljunk meg kilépni az adatmezőből és az input form-ból. Írjuk a keresési mezőbe a xss"> kifejezést. Ha minden jól megy, akkor ebben az esetben a " lezárja az adat mezőt a kifejezés után, a > pedig az input form-ot.

xss_search2

Sikerült is. Láthatjuk, hogy az input form, value utáni része, így már kívül esik a form-on a html részre, amit a webszerver már sima szövegként jelenít meg. Nézzük meg, hogyan néz ki ez forráskód szinten (CTRL+U).

<div id="content_search">
 <form action="/kereses" method="get">
 <input type="text" name="search" class="input" value="xss">" placeholder="Keresőszó"><input class="submit" type="submit" name="submit" value="Keresés">
 </form>
</div>

Mivel itt már bizonyossá vált, hogy az oldal sebezhető, lássunk egy látványos alert(); beillesztést a résbe. A kereső mezőbe írjuk a xss"></form><script>alert("xss");</script> kifejezést.

xss_search3

A keresés eredménye pedig egy input form-on kívüli script futtatást eredményez, ami fel dob egy XSS alert ablakot.

xss_search4

Feliratkozás hírlevélre

Lehetséges támadási pont a keresés funkció mellett, a különböző adatbeviteli form-ok, pl. egy hírlevélre feliratkozás.

xss_form1

Próba képpen adjuk meg a Vezetéknév mezőben ismét a xss kifejezést. Mivel csak ezt a mezőt töltöttünk ki, így kapunk egy figyelmeztetést, a hiányos form-ról, ahol is a Vezetéknév mezőben ott a kifejezésünk.

xss_form2

Nézzük meg az oldal forráskódját és keressük meg a kifejezést.

<td class="input"><input type="text" name="form10" value="xss" class="text"></td>

Most ismét próbáljuk meg lezárni a value adatmezőt és az input form-ot, hogy a value értékadás mögötti rész, kiessen a html részre. Írjuk be a xss"> kifejezést a Vezetéknév mezőbe és lássuk mi történik.

xss_form3

Sikerült az input form-ot lerövidíteni és a mögöttes részt kitolni a html részre. Nézzük meg, hogyan is néz ez ki a forráskódban (CTRL+U).

<td class="input"><input type="text" name="form10" value="xss">" class="text"></td>

Most már csak az ismert alert(); beillesztése van hátra a vizsgálat befejezéséhez. Beírjuk a xss"><script>alert("xss");</script> kifejezést a Vezetéknév mezőbe.

xss_form4

Az eredmény ismét egy látványos XSS felugró ablak, vagyis a form sebezhető!

xss_form5

Ha az oldal nem statikus lenne, akkor a sebezhetőséget kihasználva akár php kód is futtatható lenne a biztonsági résen keresztül. Az Cross Site Scripting (XSS) sebezhetőség és a form-ok rései könnyen kihasználhatóak, megelőzni a beviteli mezők megfelelő filterezésével lehetséges.