PDF-export injektio

PDF-export-injektio - JavaScriptin käyttö

Helppo
20 min

Joskus PDF-generaattorit sallivat jopa JavaScript-koodin ajamisen. Jos palvelimen omien tiedostojen hakeminen sekä JavaScript-koodin ajaminen on mahdollista, voimme varastaa tiedostoja JavaScriptin avulla.

Tee alla oleva harjoitus ja koita saada PDF-generaattorin kautta luettua palvelimelta /etc/passwd tiedosto. Tiedosto sisältää lipun. Tehtävä ratkaistaan labran alla olevassa materiaalissa, mutta yritä kuitenkin ensin itse.

Tehtävät

Flag

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

Haavoittuvuuden todentaminen

Aloitamme etsimällä haavoittuvuuden. Verkkosivu on toiminnaltaan suhteellisen yksinkertainen, eli voimme antaa syötettä neljään eri kenttään, jonka jälkeen voimme generoida tästä "profiilista" PDF-tiedoston, joka sisältää jokaisen kentän arvon. Muutaman kokeilun jälkeen selviää, että ainoastaan kommentti kenttää ei puhdisteta ennen generointia. Loput kentistä suodatetaan siten, että näistä muodostuu HTML-enkoodattua dataa. Nimi kenttä taas ei salli HTML-koodia ollenkaan.

Haavoittuvuuden hyväksikäyttäminen

Seuraavaksi käytämme hyväksi haavoittuvuutta ja varastamme /etc/passwd tiedoston. Kyseinen tiedosto löytyy jokaisesta Linux-järjestelmästä, joten se on mainio PoC (Proof-of-Concept) tiedosto, kun halutaan todeta, että pystyy lukemaan palvelimen sisäisiä tiedostoja.

Jos yritämme käyttää tähän edellisessä tehtävässä käytettyä iframe-elementtiä, niin PDF-tiedosto ei tule sisältämään muuta kuin tyhjän ikkunan.

Tämä riippuu jokseenkin PDF-generaattorista ja tilanteesta. Joskus iframe toimii, joskus ei. Silloin, kun se ei toimi, kannattaa varautua käyttämään muita keinoja kuten JavaScript-koodia. Kokeillaan seuraavaa koodia.

<script>
x=new XMLHttpRequest;
x.onload=function(){ document.write(this.responseText) };
x.open("GET","file:///etc/passwd");
x.send();
</script>

Yllä oleva JavaScript-koodi käyttää vanhempaa tapaa suorittaa HTTP-pyyntöjä JavaScript-koodilla. Uudempi fetch-funktio ei tue file:/// skeemaa. Koodi hakee tiedoston /etc/passwd ja kirjoittaa sen dokumenttiin.

Onnistuipas! - Olemme nyt onnistuneesti vuotaneet /etc/passwd tiedoston palvelimelta. Kokeile seuraavaksi keksiä muita tapoja itse, miten tiedoston voisi vuotaa palvelimelta, nyt kun iframe-elementti ei toimi.

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ä.