Tunkeutumistestaus -kurssin raportti, osa 1
Tämä on tehtäväraportti Haaga-Helian Tunkeutumistestaus -kurssilta, missä tarkastelemme erilaisten järjestelmien tietoturvallisuutta ja tarkastellaan miten hakkerit näkevät järjestelmän pyrkiessään tunkeutumaan niihin.
Raportin tekijä: Jyrki Aho
Hanki kutsu HackTheBoxiin
Onnistuin labratyön aikana hankkimaan kutsun hacktheboxiin. Konsolin kautta näin vihjeen javascript tiedostosta, mistä löysin komennon makeInviteCode -komennon. Suoritin kyseisen komennon, joka oltiin kryptatty ROT13 menetelmällä. Tiesin mihin salaukseen järjestelmä tällöin perustui. Sain selvitettyä viestin sisällön ROT-13 sivujen kautta. Sivustolla pyydettiin lähettämään POST-kutsu osoitteeseen /api/invite/generate. Avasin selaimen konsolin ja kirjoitin sinne koodin
Tämän seurauksena sain koodatun tekstinpätkän. Koodin pätkä näytti tutulta jostakin aikaisemmasta yhteydestä. Googlasin nopeasti koodin ja näin hakutekstien joukossa termin Base64. Etsin Googlella Base 64 kääntäjän ja sain koodin, minkä avulla pääsin kirjautumaan HackTheBoxiin.
Lähteet
Rot-13 sivu. Luettavissa: https://rot13.com/. Luettu: 2.4.2021.
Base 64 Decode. Luettavissa https://www.base64decode.org/. Luettu 2.4.2021,
Kalin asennus
Käytössä olevaan koneessani on käytössä 64-bittinen Ubuntu 20.04.2 LTS käyttöjärjestelmä. Olen jo aikaisemmin asentanut koneeseeni Ubuntu Softwaren kautta VirtualBoxin, joten sen asentamista minun ei tarvinnut suorittaa. Suoritettu alkutoimenpiteet Tero Karvisen Remote learning tools for Tero's Course ohjeen mukaisesti, paitsi että nimesin järjestelmän Kaliksi ja valitsin Oter Linux (64 bit). Näihin säätämisiin ja tarkistuksiin kului noin 15 minuuttia.
Valittu Boot menusta Start installer, koska ajattelin samantien asentaa kyseisen Linuxin. Select a language -kohdassa valitsin asennuskieleksi englannin. Select your location kohdassa valitsin Continue-painikkeilla painamalla kohdat other->Europe->Finland. Tämän jälkeen kysyttiin Configure locales, johon laitoin United states - en_us.UTF-8, jonka jälkeen klikkasin Continue-painiketta. COnfigure the keyboard -valitsin kohdan Finnish
Tämän jälkeen asennusohjelma rupesi raksuttaan ja latailemaan tietoja hetken aikaa. Latauksen jälkeen asennusohjelma kysyi Configure the network, mihin kirjoitin Hostnameksi LambdaK. Tämän jälkeen ohjelma kysyi Domain name, mutta jätin tämän kohdan tyhjäksi, koska tarkoitukseni ei ole pystyttää palvelinta. Oletan myös että tämän voi asettaa myöhemminkin, mikäli on pakko.Tämän jälkeen järjestelmä kysyi käyttäjän nimen, tunnuksen, salasanan ja salasanan vahvistuksen, jotka syötin järjestelmään.
Järjestelmä kysyi tämän jälkeen Partition disk ja valitsin oletuskohdan Guided - use entire disk. Järjestelmä antoi tämän jälkeen yhden ainoan vaihtoehdon, joten klikkasin Continue -painiketta. Tämän jälkeen kysyttiin Partition schemeä, mihin asetin oletusarvon All files in one partition (recommended for new users), koska en nähnyt syytä miksi minun olisi pitänyt erotella tiedostot virtuaalikoneessa, jota aion käyttää kurssitöiden suorittamisessa. Muussa tapauksessa olisin valinnut toisen vaihtohehdon, eli Separarate /home partition. Näiden asetusten jälkeen järjestelmä näytti raportin asetetuista partition asetuksista. Valitsin kohdan Finish partitioning and write changes to disk ja painoin Continue-painiketta. Tämän jälkeen ohjelma kysyi haluanko kirjoittaa nämä muutoksen kovalevylle ja valitsin kohdan Yes. Tämän jälkeen ohjelmisto rupesi asentamaan uutta käytöjärjestelmää, mutta sitten kone yhtäkkiä jähmettyi. Jouduin käynnistämään koneen uudellen, jotta pystyisin jatkamaan asennusta.
Aloitin asennuksen alusta ja valitsin samat asetukset kuin äsken mainitsin. Kone raksutti tämän viimeisimmän asennuksen jälkeen jonkin aikaa, kunnes pyysi konfiguroimaan pacakge managerin. Valitsin Use a Network mirror kohtaan Yes. Tämän jälkeen Kali kyysi Http proxy information (blank or none), minkä jätin tyhjäksi ja jatkoin asennusta painamalla Continue-painiketta.
Näiden asennusten jälkeen asennusohjelma kysyi jos haluan asenta GRUB boot loaderin, johon vastasin Yes. Ohjelma ehdotti että valitsisin laitteen itse tai sitten valitsisin vaihtoehtoisen laitteen dev/sda. Valitsin että kyseinen boot loader asennettaisiin tähän laitteeseen. Kone raksutti tämän jälkeen hekten aikaa, kunnes asennusohjelma kysyi haluanko viimeistellä asennukset. Painoin Continue-painiketta, jonka jälkeen ohjelma vielä raksutti hetken aikaa, minkä jälkeen virtuaalikone käynnisti itsensä uudestaan asennetussa Kali järjestelmässsä. Arvioisin tähän hommaan menneen noin kolme tuntia, mikä pääosin johtui siitä, että jouduin aloittamaan asennuksen alusta.
Lähteet
Karvinen, T., 2020. Remote Learning Tools for Tero's Courses. Luettavissa osoitteessa: https://terokarvinen.com/2020/remote-learning-tools-for-my-courses/. Luettu 31.3.2021
OWASP
WebGoatin ja Webwolfin asennus
Asennettu WebGoat Tero Karvisen sivujen ohjeiden mukaan. Webwolfin asentamisen kanssa oli ongelmia. Sain asennettua dockerin koneelle, mutta se kaatui virheilmoituksiin, kun yritin asentaa Webwolfia sen avulla. Havaitsin kuitenkin Percyn ohjeita selaamalla, että WebGoat ja WebWolf on asennettu samaan url-osoitteeseen jar-tiedostoina. Tämän vuoksi hain sitten kyseisen ohjelman komennolla
Tämän jälkeen ensimmäisen testin, eli WebWolfin testaus toimi moitteettomasti. Eli kirjoitin osoitteekseni jyrkia@webgoat.org ja lähetin viestin. Kävin poimimassa Webwolfin sähköpostista koodin, jonka sitten sijoitin syöttökenttään ja vahvistin koodin oikeellisuuden. Jälkimmäinen webwolf testi pisti vähän mietityttämään, kun piti json tekstin joukosta löytää uniikki koodi. Oletin aluksi koodin olevan sessio-koodi, mutta kyseinen uniikki koodi oltiinkin piilotettu uri-osoitekentän parametrien joukkoon.
HTTP Basics
Lähdin suorittamaan WebGoatin ensimmäistä osiota. Ajattelin ladata Zapin Kali virtuaalikoneeseen, mutta totesinkin että kyseinen ohjelma löytyykin jo valmiiksi Kalista. Päivitin kyseisne ZAP paketin ajantasalle. Latasin Zapin oman sertifikaatin zap -hakemistoon. Tämän jälkeen menin Preferencesin kautta Firefoxin Privacy & Security välilehteen, jossa valitsin kohdan Certificates. Klikkasin View Certificates kohtaa ja importtasin kyseisen sertifikaatin kaikkine oikeuksineen Firefoxiin. Tämän jälkeen menin General välilehdelle ja menin Network setting kohtaan. Klikkasin Settings -painiketta ja laitoin pallon kohtaan Manual proxy configuration. Määrittelin siellä HTTP proxyn osoitteeksi 127.0.0.1 ja asetin portin arvoksi 8090. Laitoin myös ruksin kohtaan "Also use this proxy for FTP and HTTPS". Klikkasin OK:ta ja yritin saada ZAP ohjelman nappaamaan GET ja POST lähetykset, mutta jostakin syystä kyseinen ohjelma ei napannut niitä ollenkaan. Yritin saada näitä ominaisuuksia toimimaanja etsin internetistä tietoa, mutta en löytänyt mitään varteenotettavaa neuvoa ongelmaan. Havaitsin ZAPissa olevan oman selainen, joten päätin kokeilla sen toimintaa ja klikkasin "Open the browser..." -painiketta. Tässä kyseisessä selaimessa GET ja POST lähetysten nappaaminen onnistui erinomaisesti. Ruudun täyttivät jatkuvat kutsut osoitteista
Excludasin nämä proxystä, jolloin niiden jatkuva virtaus loppui, jolloin oli helpompoi löytää osoitteiden
lähettämät kutsut ja niiden sisältö. Nappasin kutsun rakenteesta tiedon lähetystavasta (Post) ja taikanumeron arvon, jotka syötin ruutuihin ja painoin Go-painiketta. Tällöin ohjelma onnitteli onnistumisesta.
Developer tools
Ensimmäinen kohta oli helppo. Eli avasin selaimen konsolinäkymän painamalla Ctrl+Shift+I -painikkeita, sekä kirjoitin sinne sivullaesiintyvän komennon webgoat.customjs.phoneHome(). Ohjelma palautti Javascript objektin, joka sisälsi tiedon onistumisesta, sekä phoneHome numeron arvon, joka oli syötettävä sivulla olevaan kenttään.
Tämän jälkeen siirryin sivulle kuusi suorittamaan seuraavaa tehtävää. Siellä haluttiin opettaa, miten selaimen avulla voidaan tarkastella HTTP kutsuja. Painoin Ctrl+Shift+I-painikkeita, jotta sain konsolin esille. Valitsin sieltä Networkin ja sieltä oikealta puolelta kohddan Request. Painoin Go-painiketta, jolloin sain napattu networkNum arvo.
Osio A1SQL Injection
Sivulla kaksi oli suoritettava SQL kysely, missä on haettava työntekijä Bob Francon osaston nimi. Koska olen koodannut jonkin verran, niin osasin suoraan esittää kyselyn
Sivulla kolme oli päivitettävä Tobi Barnettin osastoa. Yritin muuttaa osastoa komennolla
Sivulla neljä oli lisättävä taulukkoon puhelinnumero sarake. Koitin lisätä sarakkeen komennolla
Sivulla viisi oleva moduuli oli myös perus SQL -komentojen kyselyjä ja sain sen ensimmäisellä kerralla oikein, kuin luin kysymyksen asettelun tarpeeksi huolellisesti. Eli läpäisin sen komennolla
Sivulla yhdeksän piti suorittaa perinteinen injektio hyökkäys, missä katenoituun SQL-komentoon lisätään ylimääräisiä merkkejä, joiden avulla saadaan haettua käyttäjistä tietoja. Itsellä meni ensimmäinen yritys pieleen, koska teksitkentät oltiin sijoitettu oudosti keskelle kyselyä. Kun näki mihin kohtaan tekstikenttä sijoitti tekstit, niin seuraava yritys onnistui kun asetin ' or '1=1.
Sivulla kymmennen koitin muurtautua järjestelmään asettamalla Login Count kenttään arvon 0 or login_count<>0 ja userid kenttään arvot 0 or userid<>0, mutta järjestelmä ei hyväksynyt tätä vastausta. Koitin seuraavaksi testata murtautumista asettamalla Login count kenttään arvon 0 ja User_id kenttään arvon 0 or userid!=0 ja tällöin sain tulostettua kaikki käyttäjät.
Sivulla yksitoista piti tehdä String hyökkäys, jonka tarkoituksena oli nähdä muiden myyntiosaston henkilöiden Employee kentän arvoksi asetin Smith ja Authentication TAN arvoksi asetin ' or '1'='1, jolloin pääsin murtautumaan suoraan järjestelmään.
Sivulla kaksitoista piti muuttaa Smithin palkkausta suuremmaksi. Palasin aikaisempaan tehtävään poimiakseni käyttäjien tiedot, jotta voisin tehdä tarvittavat muutokset oikein. Eli kirjoitin Employee Name kohtaan Smith ja Authentication TAN kohtaan '; update table employees set salary=84000 where userid=37648;--. Järjestelmä ei hyväksynyt tätä komentoa, mutta kun otin table sanan pois, niin sain muutettua Smithin palkan suurimmaksi.
Viimeisellä sivulla piti käydä poistamassa lokikirja, jotta Smith ei jäisi kiinnni tekemiensä muutosten vuoksi. Koska en tiennyt miten tuon kyseisen kyselyn rakenne oltiin tehty, niin tein sellaisen hyökkkäyksen kuin '; drop table access_log;--, joka toimi menestyksekkäästi. Tämän osion tekemiseen meni noin tunti, mutta toisaalta nämä hyökkäykset olivat vasta perustason hyökkäyksiä.
Lähteet
Karvinen, T., 2020. Install Web goat 8 - Learn Web Pentesting. Luettavissa: https://terokarvinen.com/2020/install-webgoat-web-pentest-practice-target. Luettu: 31.3.2021
Percy, E.C., 2020. Getting started with WebGoat and WebWolf using Jar. Luettavissa: https://medium.com/@develouise/getting-started-with-webgoat-and-webwolf-using-jar-d06431883cc2. Luettu 31.3.2021.
W3School. 2020. SQL Uppdate Statement. Luettavissa: https://www.w3schools.com/sql/sql_update.asp. Luettu: 1.4.2021.
W3School. SQL ALTER TABLE Statement. Luettavissa: https://www.w3schools.com/sql/sql_alter.asp. Luettu: 1.4.2021.
ZAP. 2020. Getting started. Luettavissa: https://www.zaproxy.irg/docs/desktop/start/. Liuettu 31.3.2021.
Kali Linux työkalun kokeilu
Päätin testata Legion työkalua, minkä vuoksi irroitin koneeni varmuuden vuoksi verkosta ennen kokeilua ja asensin kohde osoitteeksi 127.0.0.1. Kyseisen ohjelman skannaus löysi ainoastaan yhden avoimen portin 8080:n. En viitsinyt kokeilla ensialkuun muita työkaluja, koska ensin on selvitettävä mitä kyseiset työkalut tekevät.