Tehtävä a)
Saamme hackthebox.eu koneille yhteyden openvpn kautta. Tätä varten joudumme lataamaan openvpn ohjelmiston, sekä connection packin jota käytämme yhteyttä muodostaessamme. On tärkeää, että varmistumme siitä että olemme oikeassa verkossa emmekä vahingossa ala skannaamaan internetissä olevia laitteita, sillä se on rikos Suomessa. OpenVpn pack ladataan HTB:n sivuilta, mutta sitä ei voi saada ilman hyväksyttyä käyttäjätunnusta hacktheboxissa. Mutta se on siis meidän lähde (Lähde 1).
Virtualboxin laitteet ovat osoitteessa 10.10.10.0-255, eli kaikkien skannausten pitäisi rajoittua vain tälle alueelle. Kokeillaan, olemmeko oikeassa verkossa ensin pingin avulla, eli pystymmekö pingaamaan oikeita koneita openvpn päällä, ja pystymmekö pingaamaan niitä openvpn pois päältä. Pingaus ei ole rikollista toimintaa, eikä siitä voi joutua vaikeuksiin, joten vaikka pingaisimme väärää laitetta, ei sillä ole väliä. Tässä olen valinnut pingin kohteeksi laitteen 10.10.10.168 joka näkyy hackthebox.eu sivulla.

Tässä kuvassa meillä on siis 2 terminaalia auki, toinen näyttää openvpn yhteyden, ja toinen on pingaamista varten. Kuten näemme, pystyimme openvpn päällä pingaamaan laitetta 10.10.10.168 onnistuneesti, eli meillä on yhteys siihen. Nyt mikäli pystymme pingaamaan sitä vielä openvpn pois päältä, tarkoittaa se että emme jostain syystä pingaa oikeaa laitetta, sillä meillä ei pitäisi olla yhteyttä tähän laitteeseen ilman openvpn yhteyttä. Kokeillaan:

Kuten kuvasta näkyy, emme yrityksestä huolimatta saaneet samaa laitetta pingattua ilman openvpn yhteyttä. Tämä siis tarkoittaa että olemme toimineet oikein, ja openvpn yhteys on toimiva.
Tehtävä b)
Tiedämme nyt siis että hacktheboxin laitteet sijaitsevat verkossa 10.10.10.0/24 (24 tarkoittaa samaa kuin 255.255.255.0, eli kuvaa sitä kuinka subnetmaskissa on 24 bittiä). On siis tärkeää että varmistumme siitä, että skannimme rajaantuvat pelkästään tälle alueelle. Voimme tehdä perusskannauksen nmapilla komennolla nmap -oA nopea_port_skan 10.10.10.0/24. Tämä siis skannaa hacktheboxin subnetin, ja se tekee sen perusasetuksilla, eli se tulee skannaamaan 1000 tavallisinta porttia ja tekee samalla host discoveryn.. Se samalla kirjoittaa nämä tiedot tiedostoon nopea_port_skan 3 eri muotoon (-oA <tiedoston_nimi>). Tiedostoon on hyvä kirjoittaa sen takia, että jokaisessa portti skannissa menee jonkun verran aikaa, joten näin saamme saadut tiedot talteen eikä meidän tarvitse portti skannata kohdetta uudelleen mikäli unohdamme tiedot.
Tähän ekaan skanniin meni peräti 18 minuuttia ja 46 sekunttia. Tämän takia onkin tärkeää, että kirjaamme tiedot ylös tiedostoon, sillä yksinkertaisissakin skanneissa menee pitkään. Löysimme yhteensä 18 hostia, jolla on monenlaisia palveluita auki. Esimerkiksi 10.10.10.180 löysimme peräti 9 avointa porttia, jossa juoksi ftp, http ja nfs palveluita esimerkiksi. Tai no, tässä kohtaa emme ole vielä täysin varmoja siitä mitä palveluita näillä porteilla on, sillä nmap vain arvaa palvelun tässä kohtaa porttinumeron perusteella, ja meidän pitää suorittaa syvempi skannaus jotta tiedämme tarkalleen mitä portilla on ja minkälaisia versioita ohjelmista siellä on. Haluan vielä suorittaa syvemmän portti skannauksen käyttäen tätä tietoa mitä olemme nyt saaneet kohteista irti, joten tulen suorittamaan vielä lisää portti skannauksia. Parempi tapa toimia olisi varmaan ollut ensin tehdä pelkkä host-discovery skan, jolloin olisimme saaneet listan ip-osoitteista jota sitten olisimme portti skannannut. Tämä olisi nopeuttanut tätä prosessia.
Päätin grepata tästä skannista ip-osoitteet, jotta service skanni -sV nopeutuisi, eikä se tekisi ensin host discoveryä. Tein sen tällä komennolla grep -oE “\b([0-9]{1,3}\.){3}[0-9]{1,3}\b” nopee_port_skan.nmap | cat > ip_osoitteet.txt. Nyt saimme siis tekstitiedoston, missä kaikki kohteet ovat, joten voimme vain käyttää sitä seuraavassa skannissa. Tehdään nmap -sV -iL ip_osoitteet.txt, ja seuraava skanni lähtee päälle. Tällä kertaa skannaamme siis versiot mitä porteissa olevat palvelut käyttävät.
Skannin suoritettuani unohdin että unohdin kirjoittaa tulokset tiedostoon komentoa tehdessäni, joka oli virhe, koska tähän skanniin meni kuitenkin yli 21 min aikaa. Tajusin tässä koko tehtävän aikaisessa toimintatavassa monta eri virhettä, kuten esimerkiksi sen että ensimmäisen skannin olisi pitänyt olla vain host discovery skanni jolla olisimme saaneet ip-osoitteet, ja sen jälkeen olisi pitänyt suorittaa itse services skanni. Kaikki skannien tulokset olisi myös pitänyt ottaa ylös talteen.
Analysoin yksittäisiä laitteita mitä service skannissa tuli. Esimerkiksi skanni 10.10.10.181 paljasti meille laitteen jossa on 3 aukinaista porttia, 22, 80 ja 8000. Portilla 22 on ssh palvelu jonka versio on OpenSSH 7.6p1, kun taas portilla 80 juoksee apache webserveri versiota 2.4.29. Portilla 8000 on tcpwrapped, joka siis tarkoittaa että se mitä tällä portilla on on suojeltu tcpwrappedin avulla. Nopealla googlauksella näkee, että openssh 7.6p1 on enumeration exploit, eli hyökkääjä pystyy selvittämään mitkä käyttäjänimet ovat oikein. Myös tässä apachen versiossa vaikuttaisi olevan haavoittuvuuksia, erityisesti privilege code execution exploitti, jolla siis pystymme tekemään asioita esim. rootin käyttöoikeuksilla. Tämä exploit siis antaa meille rootin käyttöoikeudet. Tein vielä niin, että kävin webserverissä itse paikalla nopeasti katsomassa miltä siellä näyttää:

No näköjään joku on jo tehnyt kaiken työn meille (melkein). En nyt kuitenkaan lähtenyt ratkomaan tätä boxia mutta sen verran sain tältä tiedosteltua 🙂
Toinen laite jota analysoin on 10.10.10.165. Siellä oli portit 22 ja 80 auki, ja portilla 22 oli sama openssh versio kuin 10.10.10.181 eli openssh 7.9p1, ja portilla 80 toimi webserveri versiota nostromo 1.9.6. Tuolla nostromon versiolla on olemassa remote code execution exploit CVE:llä 2019-16278. Kävin myös tämän palvelimen sivuston läpi:

Näköjään joku web dev sivu. En mennyt tätä pidemmälle, analysoin vain boxia ja vähän katselin miltä se näyttää. En tiedä mitä muuta voisin analysoida jos en ala ratkomaan itse boxeja, johon minulla ei tällä hetkellä ole aikaa, mutta saatan tehdä sen tulevaisuudessa 🙂
Tehtävä c)
Tehtävät tehty webgoat 7.
Laskujeni mukaan olen tehnyt jo 9 kohtaa, joten vielä tarvitaan 6 lisää (ainakin) katsotaan kuinka pitkälle pääsen. Jatkan kohdasta Silent transactions attacks (ajax security). Tätä kohtaa en ihan rehellisesti tajunnut, joten liikuin eteenpäin jos tulisi sellainen vastaan minkä osaisin tehdä.
Liikuin suoraan eteenpäin authentication flaws kohtaan, sillä minusta tuntui että AJAX securityssä jäljellä olleet tehtävät olisivat semmoisia mitä en pystyisi itse tekemään ilman apua.
Authentication flaws: password security. Tässä piti kokeilla eri salasanoja eräällä sivustolla ja kertoa kuinka monta sekunttia/tuntia/päivää niiden ratkomiseen menisi pöytätietokoneella. Tietokoneista on kuitenkin tullut nopeampia ajan myötä, sillä luvut mitä webgoat odottaa eivät ole enään samoja kuin mitä sivusto antaa nykyisin, vaan ne ovat huomattavasti nopeampia. Ratkaisin siis “tehtävän” mutta webgoat ei tätä tiennyt.
Seuraavassa kohdassa “forgot password” piti saada password recovery jonkun toisen käyttäjällä. Valitsin käyttäjänimeksi “admin” ja pyysin salasananpalautusta. Palvelu kysyi lempiväriäni, kokeilin ensin punaista, ei toiminut. Sitten sinistä, ei taaskaan toiminut. Mutta sitten kokeilin vihreää, ja se toimi, ja sain uuden salasanan sivustolta jolla pystyisin kirjautumaan tälle admin käyttäjälle. 11 tehtävä tehty.
Seuraavat 2 kohtaa olivat bugisia ja eivät oikein toimineet, joten skippasin.
Buffer overflow, en tajunnut miten sen voi tehdä.
Code quality, discover clues in the HTML. Tässä kohtaa piti tutkia HTML koodia kommenttien varalta, ja kuinkas ollakkaan, koodiin oltiin kommentointu “admin:adminpw” eli admin tunnuksen kirjautumistiedot. Käytin niitä kirjautumiseen ja pääsin sisään admin tunnuksilla. 12 tehty.
Concurrency: thread safety problems. Tässä kohdassa oli 2 käyttäjää joilla olisi voinut kirjautua: jeff ja dave. Tehtävässä piti koittaa kirjautua molemmilla samanaikaisesti ja katsoa mitä tapahtuu. Avasin uuden firefox tabin, ja kirjoitin siihen dave, ja alkuperäiseen jeff. Sen jälkeen painoin submit nappia molemmilla, ja dave sai itseasiassa jeffin tiedot. Jeff sai myös omat tietonsa, mutta kun nämä kaksi asiaa tapahtuivat samaan aikaan pääsi dave näkemään jeffin tietoja mitä hänen ei ollut tarkoitus nähdä. 13 tehty.
Seuraavaksi otin concurrencystä “shopping cart concurrency flaw” kohdan. Tässäkin avasin 2 tabia firefoxia samasta tehtävästä. Ensin koitin ostaa 2 eri tuotetta samaan aikaan, mutta olin laittanut ne shopping cartille ja molemmat tabit päivittyivät samaan aikaan oikein, eli en saanut ostettua esinettä halvempaan hintaan. Seuraavaksi koitin tehdä niin että päivitän ostoskorini kalliimmalla esineellä samalla kun olen ostamassa toisella välilehdellä halvan esineen. Tämä toimi, ja sain ostettua kaupan kalleimman esineen halvimman hinnalla. Tehtävä läpi, ja seuraavaan kohtaan. 14 tehty.
Liikun nyt kohtaan Cross-site scripting (XSS) ja alan tekemään ensimmäisestä tehtävästä eteenpäin, eli kohdasta “phishing with XSS”. Tätä kohtaa en osannut ihan itse tehdä, joten skippasin.
Seuraavassa kohdassa eli “stored xss attack” pystyi kirjoittamaan foorumille viestejä. Laitoin viestin titlellä “testi” ja viestin sisään seuraavanlaisen koodipätkän:
<html>
<body>
<button onclick="testiFunktio()"> Tämä on testi </button>
<script>
function testiFunktio() {
alert("You have been compromised!")
}
</script>
</body>
</html>
Tämä siis luo napin jota painamalla skripti juoksee, ja tässä tapauksessa se luo alert() boxin joka sanoo “You have been compromised!”. Viestin luotuani painoin sitä, ja sen jälkeen painoin vielä tekemääni nappia, ja alert boxi ilmaantui. Ajattelin että tämä riittäisi, ja kyllä se riitti kohdan läpäisyyn. Pitää vielä sen verran mainita että ensin olin tehnyt funktion niin että se veisi käyttäjän nappia painamalla google.com, ja kyllähän se toimi, mutta en ajatellut niin pitkälle että en pääse kohdasta läpi sillä poistuin samalla sivulta. Olisi varmaan voinut tehdä tämän myös helpommin, no kirjotin enemmän. 15 tehty.
LAB: cross site scripting. Kohta 1. Piti tom cattina tehdä stored XSS attack editprofile:n avulla. Eli painoin tomina EditProfile, ja laitoin kohtaan street <script>alert(“testi”)</script>. Tämän jälkeen kirjauduin jerrylle ja katsoin tomin profiilisivua johon tämän XSS attackin laitoin, ja jerrylle tuli tämä alert. Pääsin läpi. Stage 2 oli tämän patchaamista, ja toimi vain webgoatin dev versiolla, joten skippasin. 16 tehty.
Stage 3 ei oikeastaan tehty mitään, piti vain kirjautua käyttäjällä david ja katsoa brucen profiili jossa oli XSS attack, no okei, se toimi. Eteenpäin (17 tehty).
Stage 4 on webgoatin dev versio only, joten skip.
Stage 5, kirjoitin vain search staff input fieldiin <script>alert(“testi”)</script> ja pääsin tästä kohdasta läpi. 18 tehty.
Stage 6 dev mode only, skip.
Reflected XSS attack kohta. Pistin vain <script>alert(“testi”)</script> erääseen input fieldiin jonka jälkeen painoin “purchase”, jolloin alert tuli näkyviin ja pääsin kohdasta läpi. 19 tehty.
Lisätty 17.5.2020:
Lähteet lisätty.
Tehtävät on otettu kurssin kurssisivulta, linkki tässä: http://terokarvinen.com/2020/tunkeutumistestaus-kurssi-pentest-course-ict4tn027-3003/
Lähteet:
Lähde 1: https://www.hackthebox.eu/
Caius Juvonen 2020