XSS (Cross-Site Scripting)

XSS JavaScript-merkkijonoissa 1

Helppo
45 min

Tässä moduulissa hyväksikäytämme harjoituskohteessa olevaa XSS-haavoittuvuutta, joten voit käynnistää alla olevan tehtävän ja toistaa vaiheet omassa tahdissa.

XSS merkkijonoissa 1

Tässä tehtävässä käytämme hyväksi XSS haavoittuvuutta, johtuen sovelluksen turvattomasta tavasta asettaa sekä käsitellä käyttäjän syötettä JavaScript merkkijonossa.

Tavoite

Kaappaa järjestelmänvalvojan istunto

Tehtävät

Flag

Löydä lippu (flag) labraympäristöstä ja syötä se alle.

XSS-haavoittuvuuksia voi usein syntyä, jos käyttäjän hallinnassa olevaa syötettä käsitellään tai käytetään turvattomasti sovelluksen omassa JavaScript-koodissa. Verkkosovelluksia testatessa onkin tärkeää ymmärtää sekä varmistaa selainpuolella tapahtuvan JavaScript-koodin toiminta.

Haavoittuvuuden löytäminen

Aloitamme tutkimalla sovelluksessa olevia toiminallisuuksia ja huomaamme nopeasti, että sovellus käyttää hakukentässä syötettyjä arvoja JavaScript-koodin merkkijonona.

Hakukentän arvo heijastetaan search parametrissa sekä sovelluksen JavaScript-koodissa, searchTerm nimisessä merkkijonossa.

Jatkamme analyysia katsomalla miten sovellus käsittelee erikoismerkkejä. Tarkoituksemme on yrittää rikkoa merkkijonon rakenne siten, että voimme kirjoittaa omaa JavaScript-koodia merkkijonon jälkeen. Kokeilemme seuraavanlaista syötettä.

'; const omaparametri='

Voimme käyttää tähän suoraan URL-osoitteessa käytettyä search parametria.

Onnistuimme määrittämään oman parametrin olemassa olevan koodin sekaan. Tämä tarkoittaa, että voimme kirjoittaa omaa JavaScript-koodia käyttämällä search parametria. Sovellus on haavoittuvainen XSS-hyökkäykselle.

Huomaamme, että sovellus ei formatoi tai estä heittomerkkejä oikein, mikä mahdollistaa merkkijonosta pakenemisen sekä oman JavaScript-koodin lisäämisen olemassa olevan koodin sisään.

Varmistamme myös, että hyväksyykö sovellus HTML-koodissa käytettyjen erikoismerkkien käytön seuraavanlaisella syötteellä.

';</script>

Huomaa, että sovellus formatoi syötetyt < ja > merkit oikein, jolloin selaimeen palautettu teksti sisältää HTML-koodatut versiot merkeistä.

Sovellus näyttää estävän tyypilliset XSS-haavoittuvuuksissa käytetyt erikoismerkit, joten joudumme käyttämään ensimmäisenä löydettyä tapaa suorittaa XSS-hyökkäys. Hyvänä tapana on vielä tuplavarmistaa haavoittuvuus aiheuttamalla hälytyslaatikko selaimessa.

JavaScript-koodissa // merkki-yhdistelmä tarkoittaa kommettia, jolloin alla oleva syöte kommentoi muun samalla rivillä olevan koodin pois. Tämä ei ole pakollista, mutta helpottaa lopullisen haittakoodin rakentamista.

'; alert('xss'); //

Huomio, kuinka // merkit kommentoivat muun koodin pois, eikä meidän tarvitse murehtia mahdollisista virheistä, joita meidän syötteestä voisi koitua.

Hyödynnä haavoittuvuutta

Lopuksi suoritamme hyökkäyksen käyttämällä samaa ideaa kuin ensimmäisessä moduulissa, eli käytämme sovellukseen rakennettua linkkien tallennus toimintoa järjestelmänvalvojan istuntoevästeen vuotamiseen. Tämä tapahtuu seuraavissa vaiheissa.

  • Tallennamme itse uuden linkin ja analysoimme siitä koituneen HTTP-pyynnön
  • Toistamme pyynnön JavaScript-koodilla, siten että tallennettu linkki sisältää istuntoevästeet. (document.cookie)
  • Asetamme haittakoodiamme sellaiseen muotoon, että tämä toimii löydetyssä XSS-haavoittuvuudessa
  • Lisäämme sivulle linkin, joka sisältää lopullisen URL-osoitteen, jossa haittakoodimme sijaitsee. Tässä käytetään search parametria
  • Odotamme, että järjestelmänvalvoja kokeilee linkkiämme, joka pakottaa järjestelmänvalvojan selaimen luomaan itse uuden linkin, sisältäen hänen istuntoevästeet
  • Kirjaudumme sisään järjestelmänvalvojana

Kokeile toistaa listatut vaiheet itse! - Voit ottaa mallia aiemmista moduuleista.

SPOILERI: Näin ratkaiset tehtävän; muista yrittää ensin itse!

hakatemia pro

Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.

Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.