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.
Tiedostojen lähettäminen on toiminnallisuutena kompleksinen ja voi johtaa moniin haavoittuvuuksiin, jos kaikkea ei oteta huomioon. Mahdollisuus siirtää omia tiedostoja järjestelmään onkin usein yksi mielenkiintoisimmista testattavista asioista verkkosivuja testatessa. Lähestymistapoja tiedostojen lähettämiseen on monia ja moni asia voi johtaa erilaisiin haavoittuvuuksiin, jos kaikkea ei oteta huomioon. Tässä moduulissa tutkimme, minkälaisia XSS-haavoittuvuuksia voi mm. koitua, kun sovellus sallii vaarallisia tiedostotyyppejä, eikä palauta tiedostoa tilanteen vaatimalla tavalla.
Haavoittuvuuden löytäminen
Aloitamme tutkimalla siirtämällä sovellukseen yksinkertaisen TXT tiedoston ja katsomme kuinka sovellus käsittelee tiedostoa. Haluamme ymmärtää muunmuassa, kuinka tiedoston siirto suoritetaan ja pääseekö tiedostoon käsiksi sovelluksesta käsin.
Siirsimme sovellukseen test.txt nimisen tiedoston ja sovellus loi sivulle linkin tiedostoon.
Sovellus otti vastaan antamamme TXT tiedoston ja loi sivulle linkin tiedostoon. Linkkiin navigoidessamme, sovellus palauttaa tiedoston selaimeen seuraavalla tavalla.
Content-Disposition otsakkeella verkkosivu voi kertoa selaimelle, että kyseinen resurssi täytyy ladata tiedostona alas, eikä näyttää omana sivunaan selaimessa. Koska sovellus ei palauta tätä, selain suorittaa ja näyttää tiedoston yllä olevalla tavalla, omana sivunaan. Tästä voi koitua vakavia haavoittuvuuksia riippuen siitä, mitä tiedostotyyppejä sovellus sallii. Kokeilemme seuraavaksi siirtää sovellukseen HTML-tiedoston ja katsomme onko tämä sallittua. Luomme uuden tiedoston, lisäämme tiedostoon HTML-koodia ja siirrämme tämän sovellukseen.
<h1>Hei kaikki!</h1>
Sovellus sallii HTML tiedostot ja palauttaa nämä omana sivunaan selaimeen.
Varmistamme vielä, että tiedostomme voi sisältää JavaScript-koodia ja, että sovellus on haavoittuvainen XSS-hyökkäykselle. Lisäämme tiedostoon JavaScript-koodia ja siirrämme tämän sovellukseen.
<h1>Hei kaikki!</h1>
<script>alert('xss')</script>
Hyödynnä haavoittuvuutta
Lopuksi suoritamme hyökkäyksen käyttämällä samaa ideaa kuin aiemmissa moduuleissa, eli käytämme sovellukseen rakennettua tiedostojen tallennustoimintoa järjestelmänvalvojan istuntoevästeen vuotamiseen. Tämä tapahtuu seuraavissa vaiheissa.
- Tallennamme uuden tiedoston ja analysoimme siitä koituneen HTTP-pyynnön
- Toistamme pyynnön JavaScript-koodilla, siten että tallennettu tiedosto sisältää istuntoevästeet.
- Asetamme haittakoodiamme sellaiseen muotoon, että tämä toimii löydetyssä XSS-haavoittuvuudessa
- Lisäämme sivulle uuden tiedoston, joka sisältää haittakoodimme
- Odotamme, että järjestelmänvalvoja avaa tiedostomme, joka pakottaa järjestelmänvalvojan selaimen luomaan tallentamaan uuden tiedoston, sisältäen hänen istuntoevästeet
- Kirjaudumme sisään järjestelmänvalvojana
Kokeile toistaa listatut vaiheet itse! - Voit ottaa mallia aiemmista moduuleista.
Huom! - Jotta voit ratkaista tehtävän tarvitsee sinun ensin luoda oikean näköinen HTTP-kutsu. Tähän tarvitset Blob objekteja, joita voidaan luoda seuraavalla tavalla.
var blobobjekti = new Blob([document.cookie], {type: 'text/plain'});
Myös FormData objekti vaatii muutoksia, eli lisäät luomasi Blob objektin seuraavalla tavalla.
fdata.append('share-file', blobobjekti, 'tiedostonnimi.txt');
SPOILERI: Näin ratkaiset tehtävän; muista yrittää ensin itse!
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ä.