XSS (Cross Site Scripting) sebezhetőség feltárás
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
.
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.
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.
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.
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.
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.
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.
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.
Az eredmény ismét egy látványos XSS
felugró ablak, vagyis a form sebezhető!
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.