XSS (Cross-Site Scripting)

XSS JavaScript-merkkijonoissa 2

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 2

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.

Jatketaan edellisestä moduulin aihepiirissä. Tällä kertaa kehittäjät ovat parantaneet syötteen käsittelyä, eikä edellinen haittakoodimme toimi enää.

Haavoittuvuuden löytäminen

Aloitamme selvittämällä, mitä muutoksia kehittäjät ovat tehneet, kokeilemalla seuraavanlaista yhdistelmää.

'; //

Aivan, kehittäjät ovat lisänneet heittomerkkien pakenemisen sovellukseen, jolloin JavaScript-koodi kohtelee heittomerkkejä osana merkkijonoa. Pakenemisella tarkoitetaan kenoviivojen käyttämistä tilanteissa, jossa halutaan käyttää merkkijonon rikkovia merkkejä osana merkkijonoa.

Alla oleva merkkijono sisältää yhden heittomerkin ja kenoviivaa käytetään tämän sisällyttämiseen merkkijonon sisään ilman, että heittomerkki rikkoo merkkijonon määritelmää.

const a = '\'';
// a on yhtä kuin '

Jatkamme analyysia katsomalla, miten sovellus kohtelee itse kenoviivaa, eli pystymmekö pakenemaan kenoviivaa. Syötämme seuraavan.

\'; //

Hienoa, sovellus ei pakene itse kenoviivaa. Tämä tarkoittaa, että voimme käyttää kenoviivaa heittomerkin edessä, jolloin lopullisessa JavaScript-koodissa, sovellus pakenee kenoviivamme ja pystymme rikkomaan merkkijonon sekä kirjoittamaan omaa JavaScript-koodiamme. Mutta, koska sovellus pakenee kaikki syöttämämme heittomerkit, emme voi luoda omia merkkijonoja sovellukseen, emmekä voi rakentaa haittakoodiamme tavalliseen tapaan. Onneksi JavaScript-kielessä on sisäänrakennettu funktio nimeltään fromCharCode, jonka avulla merkkijonoja voi rakentaa käyttämättä heittomerkkejä ollenkaan. Tämä toimii seuraavanlaisesti.

var x = String.fromCharCode(120,115,115);
/*
  120 == x, 
  115 == s, 
  115 == s 
  tarkoittaen, että fromCharCode funktio palauttaa meille merkkijonon xss

*/

fromCharCode funktion avulla voit rakentaa, minkä vain haluamasi merkkijonon. Tästä linkistä löydät listauksen merkeistä ja näiden char code arvoista.

Tuplavarmistamme vielä haavoittuvuuden kokeilemme vielä käyttää yllä mainittua funktiota hälytyslaatikon luomisessa.

Luomme 'xss' merkkijonon ja tallennamme tämän muuttujaan x. Sitten syötämme x muuttujan alert funktioon.

\'; var x = String.fromCharCode(120,115,115); alert(x); //

Hyödynnä haavoittuvuutta

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

  • Muokkaamme edellistä haittakoodiamme siten, että tämä käyttää fromCharCode funktiota jokaisen merkkijonon kohdalla.
  • 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ä.