Final Countdown (h5)

Tämä blogipostaus on osa Haaga-Helian Tunkeutumistestaus-kurssia, jonka Tero Karvinen pitää keväällä 2023.

Viidennen kurssiviikon tehtävät:

  • x) Lue ja tiivistä (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.)
  • y) The SUPER ultimate Hakk3r Che33tsheet 0.0.1. Tee tiivistelmä omista ja kavereiden parhaista tunkeutumistekniikoista. Ole täsmällinen, liitä komennot mukaan. Tämän kohdan vastaus lienee pidempi kuin aiempien x-tehtävien. Viittaa lähteisiin. Tässä alakohdassa ei tarvitse ajaa komentoja tietokoneella.
  • a) Asenna Hashcat ja testaa sen toiminta murtamalla esimerkkisalasana.
  • b) Salainen, mutta ei multa. Ratkaise dirfuzt-1 artikkelista Karvinen 2023: Find Hidden Web Directories – Fuzz URLs with ffuf
  • c) Asenna John the Ripper ja testaa sen toiminta murtamalla jonkin esimerkkitiedoston salasana.
  • d) Jurpon sivut. Ohhoh, sieppasit juuri Jurpon Windowsista NTLM-tiivisteen 83f1cf89225005caeb4e52c9ea9b00e0 . Liitteenä Jurpon kotisivulta leikattu ja liimattu teksti. Tee oma hyökkäyssanakirja ja murra tiiviste myöhempää liikkumista (lateral movement) varten.
  • e) Valitse 2: Ratkaise kaksi itse valitsemaasi tehtävää PortSwigger labs -sivulta. Tietysti sellaisia, jotka eivät ole olleet vielä läksynä.
  • k) Vapaaehtoinen: käännä hashcat lähdekoodista. Auttaisikohan se hashcat:n AMD Ryzen -ongelmiin? Jos sinulla on AMD Ryzenin juuri se ongelmallinen malli, voit myös etsiä vaihtoehdon Hashcatille.
  • l) Vapaaehtoinen: Murra jonkin itse tekemäsi tiedoston salasana. Onnistuuko muillakin kuin zip:llä?
  • m) Vapaaehtoinen, vaikea: Lataa jokin kone Vulnhubista ja murtaudu siihen.

Liite: Jurpon kotisivu

Jurpon kotisivu

MasterLazerMan on suosikkisankarini. Olen aika komea, koska harrastan thriatlonin lisäksi Foo Man Zhu -perinnepainia. Olen kotoisin Kouvolasta, jonka arkkitehtuuri saa sydämmeni sykkiimään vikkelämmin.

Nähdään IRCissä, sähköpostissa tai DeepThinked-piilopalvelussa TORissa.

(Karvinen 2023 a)

x) Tiivistelmä

Salasanojen murtaminen Hashcatilla

Järjestelmät eivät tallenna alkuperäisiä salasanoja vaan niiden tiivisteitä, jotka ovat kirjaimista ja numeroista koostuvia merkkijonoja. Salasanojen salaaminen eli tiivisteiden muodostaminen salasanoista (hashing) tehdään yksisuuntaisella funktiolla, jolla ei pysty palauttamaan tiivisteitä enää alkuperäisiksi salasanoiksi. Sen sijaan voidaan yrittää salata tietokoneella sanakirjasta jokainen sana vuorollaan ja verrata saatua tiivistettä siihen tiivisteeseen, jonka sisältö haluttaisiin tietää. Jos tiivisteet ovat samat, luultavasti myös niiden sisältö on sama.

Hashcat on yksi työkalu, jolla salasanoja voi yrittää murtaa. Tunkeutumistestauksen tekniikoita käyttäessä täytyy kuitenkin muistaa lainsäädännön ja etiikan asettamat rajat ja kokeilla niitä vain sallittuihin ja luvallisiin kohteisiin.

Yritetään murtaa esimerkkinä tiiviste ”6b1628b016dff46e6fa35684be6acc96” Hashcat-ohjelmalla.

Ensin asennetaan Hashcat:

  1. Asennetaan sovellukset:
    $ sudo apt-get update
    $ sudo apt-get -y install hashid hashcat wget
  2. Luodaan tehtävälle uusi hakemisto:
    $ mkdir hashed
    $ cd hashed
  3. Otetaan käyttöön iso sanakirja, esimerkiksi hyvin suosittu Rockyou:
    $ wget https://github.com/danielmiessler/SecLists/raw/master/Passwords/Leaked-Databases/rockyou.txt.tar.gz
    $ tar xf rockyou.txt.tar.gz
    $ rm rockyou.txt.tar.gz
  4. Komennolla
    $ head rockyou.txt

    voidaan katsoa sanakirjan kymmenen ensimmäistä sanaa  tai merkkijonoa, ja komennolla

    $ wc -l rockyou.txt

    voidaan selvittää, kuinka monta riviä – tai tässä tapauksessa sanaa – sanakirjatiedostossa on.

Tunnistetaan murrettavan tiivisteen tyyppi (hash type):

Jotta Hashcat voi murtaa salasanan tiivisteen, sen täytyy tietää, mitä tyyppiä tiiviste on. Tiivisteiden tyyppiä voi yrittää selvittää ihan vain katsomalla ja vertailemalla tunnettuihiin hash-tyyppeihin hakusanalla

'hashcat --example-hashes'

tai voidaan ohjelmallisesti analysoida hash-tyyppiä:

$ hashid -m 6b1628b016dff46e6fa35684be6acc96
Analyzing '6b1628b016dff46e6fa35684be6acc96'
[+] MD2 
[+] MD5 [Hashcat Mode: 0]
[+] MD4 [Hashcat Mode: 900]
...

Hashid-komennossa parametri -m viittaa numeroon, jota käytetään salasanan murtamisessa. Usein oikea hash-tyyppi löytyy kolmen ensimmäisen hash-tyyppiehdotuksen joukosta, esimerkin tapauksessa siis MD2, MD5 tai MD4. Jos näin ei kuitenkaan ole, voidaan moni tyyppi potentiaalisista ehdokkaista sulkea pois sen perusteella, mistä tiiviste on hankittu (Windows, Linux, …).

Esimerkin tapauksessa kokeillaan hash-tyyppiä MD5, sillä se on huomattavasti yleisempi hash-tyyppi kuin MD2 ja MD4.

Murretaan tiiviste:

Tiiviste voidaan murtaa komennolla

$ hashcat -m 0 '6b1628b016dff46e6fa35684be6acc96' rockyou.txt -o solved
  • -m 0 → hash-tyyppi (hash mode), joka saadaan selville esim. hashid-komennolla
  • ’6b1628b016dff46e6fa35684be6acc96’ → tiiviste, joka halutaan murtaa (huom. käytettävä ’-merkkiä ”-merkin sijasta, sillä moni tiiviste sisältää erikoismerkkejä)
  • -o solved → tallennetaan ratkaisu luettavassa tekstimuodossa uuteen tiedostoon nimeltä ”solved”

Hashcat on tallentanut solved-nimiseen tiedostoon murretun salasanan, joka paljastuu komennolla

$ cat solved 
6b1628b016dff46e6fa35684be6acc96:summer

Sanakirjan sanojen tiivisteitä vertaamalla selvitettävään tiivisteeseen saadaan siis selville, että murrettava salasana on ”summer”. (Karvinen 2022)

Salasanojen murtaminen John the Ripperin avulla

Moni tiedostomuoto tukee tiedoston suojaamista salasanan avulla, mutta John the Ribber -työkalu pystyy murtamaan näitä salasanoja sanakirjahyökkäyksen avulla.

Ensin asennetaan työkalut ja kirjastot, joita John tarvitsee:

$ sudo apt-get update
$ sudo apt-get -y install micro bash-completion git build-essential libssl-dev zlib1g zlib1g-dev zlib-gst libbz2-1.0 libbz2-dev atool zip wget

Ladataan John the Ripperin maksuton, viimeisin Jumbo-versio, joka tukee monia eri tiedostomuotoja:

$ git clone --depth=1 https://github.com/openwall/john.git

Konfiguroidaan John the Ripper:

$ cd john/src/ 
$ ./configure

Konfigurointi tunnistaa ympäristön, jossa John the Ripperiä yritetään käyttää, ja luo tiedoston, jonka voidaan ajaa make-komennolla:

$ make -s clean && make -sj4

Jos John the Ripperin käyttö vaatisi sellaisia työkaluja tai kirjastoja, joita ei ole vielä asennettu ympäristöön, konfiguroinnin yhteydessä saadaan ilmoituksia mahdollisesti puuttuvista riippuvuuksista (dependencies).

Kun John the Ripper on asennettu käyttöympäristöön, run-hakemistosta voidaan löytää lisää suoritettavia tiedostoja (executables)ja skriptejä:

$ cd ../run/
$ ls -1
1password2john.py
7z2john.pl
DPAPImk2john.py
adxcsouf2john.py
aem2john.py
...
$ cd

Käynnistetään lopuksi John the Ripper:

$ $HOME/john/run/john

Salasanasuojattu zip-tiedosto

Esimerkkitapauksessa käytetään salasanasuojattua zip-tiedostoa ”Download Tero.zip”

$ wget https://TeroKarvinen.com/2023/crack-file-password-with-john/tero.zip

ja yritetään avata zip-tiedosto:

$ unzip tero.zip 
Archive: tero.zip
creating: secretFiles/
[tero.zip] secretFiles/SECRET.md password: 
password incorrect--reenter: 
password incorrect--reenter: 
skipping: secretFiles/SECRET.md incorrect password

Ilman salasanaa saadaan näkyviin vain tyhjä hakemisto ”secretFiles/”, mutta tiedoston ”SECRET.md” sisältö pysyy edelleen salattuna ja jää mysteeriksi.

Zip-tiedoston salasanan murtaminen

Salasanalla suojatun zip-tiedoston salasana voidaan murtaa kaksivaiheisella prosessilla. Puretaan ensin salasanan tiiviste (hash) uuteen tiedostoon nimeltä tero.zip.hash:

$ $HOME/john/run/zip2john tero.zip >tero.zip.hash

Tämän jälkeen yritetään murtaa tiiviste John the Ripperillä sanakirjahyökkäyksen avulla:

$ $HOME/john/run/john tero.zip.hash

Tuloksena saadaan paljon tekstiä, muun muassa tällainen pätkä:

Proceeding with wordlist:/home/tero/john/run/password.lst
Enabling duplicate candidate password suppressor
butterfly (tero.zip/secretFiles/SECRET.md)

Tästä selviää, että zip-tiedoston salasana on butterfly. Nyt, kun salasana tiedetään, voidaan purkaa myös salasanalla suojattu zip-tiedosto komennolla

$ unzip tero.zip

ja syötetään selvitetty salasana.

Lopulta päästään lukemaan zip-tiedoston sisältöä komennolla

$ cat secretFiles/SECRET.md

(Karvinen 2023 b)

Piilotettujen verkkohakemistojen löytäminen Fuff-työkalulla

Verkkohakemistoilla on usein salaisia hakemistoja, joita ei ole linkitetty minnekään. Näiden osoitteita voi yrittää arvata tai etsiä monipuolisella fuzzing-työkalulla nimeltä Fuff.

Fuff fuzzaa muitakin kohteita, kuten otsikoita ja POST-parametreja, ei vain piilotettuja hakemistoja. Niinpä sen käyttämisessä täytyy olla tarkka, ettei tule epähuomiossa fuzzattua muita kuin luvallisia kohteita.

Asennetaan Fuff:

$ wget https://github.com/ffuf/ffuf/releases/download/v2.0.0/ffuf_2.0.0_linux_amd64.tar.gz
$ tar -xf ffuf_2.0.0_linux_amd64.tar.gz
$ ./ffuf

Asennetaan yleisten verkkopolkujen (web paths) sanakirja Seclists, joka on Daniel Miesslerin ja kumppaneiden kokoama:

$ wget https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/common.txt

Kytketään kone irti julkisesta verkosta ennen kuin käynnistetään Fuff.

Fuffin parametreihin voi tutustua komennolla

$ ./ffuf |& less

jolloin manuaalissa voi liikkua välilyönnillä ja b-näppäimellä ja sulkea sen q:lla.

Fuff-työkalulla fuzzataan valitsemalla sanalista (-w) ja kohde-url (-u):

$ ./ffuf -w common.txt -u http://ip-osoite:portti/FUZZ

Kun Fuff on käynyt sanalistan rivit läpi, se ilmoittaa löytämänsä salaiset verkkohakemistot kohdeosoitteessa. Jotta mahdollisesti hyvinkin pitkässä tuloslistassa näkyisi vain relevantit verkkopolut, vähemmän relevantit löydökset täytyy suodattaa pois. (Karvinen 2023 c)

y) The SUPER ultimate Hakk3r Che33tsheet 0.0.1. Omia ja kavereiden parhaita tunkeutumistekniikoita

Tässä tehtävässä pitäisi tehdä tiivistelmä omista ja kavereiden parhaista tunkeutumistekniikoista. Minun tunkeutumisharjoitukseni ovat vielä sen verran alkuvaiheessa, että minulle ei ole ehtinyt muodostua parhaita tunkeutumistekniikoita. Tosin tunkeutumisharjoituksen tehtävänannon lukeminen ajatuksella on osoittautunut tärkeäksi. Aloitankin tunkeutumisharjoituksen sillä, että mietin ensimmäiseksi, mikä olikaan tavoite ja mitä vinkkejä tehtävänannosta voisi poimia ratkaisuun pääsemiseksi.

Tunkeutumistestauksessa on erityisen tärkeää varmistua siitä, että harjoittelee tunkeutumista mahdollisimman turvallisessa ympäristössä ja vain sallittuihin kohteisiin.

Lisäys 15.5.2023: Kurssin toisen opiskelijan, Antti Halosen, kokoama cheat sheet parhaista tunkeutumistekniikoista on varsin kattava (Halonen 2023).

a) Hashcatin asennus ja sen toiminnan testaaminen murtamalla esimerkkisalasana

Aiemmassa x-tehtävässä kirjoitin tiivistelmän Tero Karvisen artikkelista ”Cracking Passwords with Hashcat”. Tein tämän a-tehtävän tiivistelmäni mukaisesti VirtualBoxin Kali-virtuaalikoneellani.

Asensin ensin sovellukset Hashcat, Hashid ja Wget:

$ sudo apt-get update
$ sudo apt-get -y install hashid hashcat wget

Loin tehtävälle oman hakemiston nimellä 5a-hashed:

$ mkdir 5a-hashed
$ cd 5a-hashed

Otin seuraavaksi käyttöön Rockyou-sanakirjan tallentamalla sen Githubista virtuaalikoneelle:

$ wget https://github.com/danielmiessler/SecLists/raw/master/Passwords/Leaked-Databases/rockyou.txt.tar.gz
$ tar xf rockyou.txt.tar.gz
$ rm rockyou.txt.tar.gz

Huomasin, että Leaked Databases -kansiosta löytyisi paljon muitakin sanakirjoja salasanatiivisteiden murtamista varten.

Testasin vielä, että Rockyou-sanakirja toimii, vaikka edellä terminaaliin olikin tulostunut teksti, jonka mukaan sanakirjatiedosto oli tallennettu. Komennoilla

$ head rockyou.txt
$ wc -l rockyou.txt

sain odotetusti tulostettua 10 ensimmäistä riviä sanakirjasta sekä selvitettyä sanakirjassa olevien rivien lukumäärän, joka vastasi Karvisen artikkelissaan mainitsemaa lukumäärä (Karvinen 2022):

Selvitin HashId:llä hash-tyypin Karvisen artikkelissa mainitulle tiivisteelle (Karvinen 2022):

$ hashid -m 6b1628b016dff46e6fa35684be6acc96

Valitsin kolmesta ylimmästä HashId:n ehdottamasta hash-tyypistä yleisimmän eli MD5:n, jonka hash-tyypiksi ilmoitettiin 0.

Lopuksi yritin murtaa salasanatiivisteen ja tallentaa tuloksen tiedostoon nimeltä ”5a-solved”:

$ hashcat -m 0 '6b1628b016dff46e6fa35684be6acc96' rockyou.txt -o 5a-solved

Salasanan murtaminen loppui lyhyeen, sillä koneesta loppui puhti kesken. Mikäli tulkitsin oikein, nimenomaan Kali-virtuaalikoneestani loppui muisti kesken, minkä takia sanakirjan sanoja tiivisteineen ei pystytty käymään läpi ja vertaamaan alkuperäiseen tiivisteeseen. Jos tosiaan kyse oli vain virtuaalikoneen muistista, tälle ongelmalle olisi varmaankin jotain tehtävissä ja käytettävissä olevaa muistia voisi lisätä. Oranssissa tekstissä mainittiin, että tiivisteiden murtamista voisi tehdä myös optimoiduilla ytimillä, kun komennon perään lisää -O. Kokeilin tätäkin oljenkortta ja yritin löytää googlettamalla muiden ratkaisuja vastaavaan ongelmaan, mutta lopputulos oli silti lähes sama:

$ hashcat -m 0 '6b1628b016dff46e6fa35684be6acc96' rockyou.txt -o 5a-solved -O

Ilmeisesti testattavien tiivisteiden kohdalla -O rajoitti salasanan maksimipituutta 256:sta 31:een, mutta siitä huolimatta muistia oli liian vähän salasanan murtamiseen. Kuinka paljon sitten on liian vähän muistia? Kalin asetusten mukaan virtuaalikoneessa oli muistia 2 GB.

Lisäys myöhemmin 14.5.2023 tekstin julkaisemisen jälkeen:

Selvitin mahdollisuutta kasvattaa virtuaalikoneen RAM-muistikapasiteettia ilman, että minun pitäisi luoda kokonaan uusi virtuaalikone. Superuser.comista löytyi juuri sopiva keskustelu aiheesta, ja neuvojen perusteella muistin kasvattamisessa ei ollut mitään ihmeellistä, kunhan virtuaalikone on sammutettu. Keskustelun ohjeet olivat seuraavat:

  1. Sulje virtuaalikone.
  2. Hylkää mahdollinen tallennettu tila (saved state).
  3. Avaa virtuaalikoneen asetukset.
  4. Avaa System-välilehti, jossa ovat järjestelmän asetukset.
  5. Muuta ”Base memory” -kohdasta RAM-muistin määrää halutuksi.
    (Superuser.com 2015)

Koska 2 GB:n muisti oli liian vähän salasanojen tiivisteiden murtamiseen, päätin tuplata muistin ja asetin RAM-muistin kooksi 4 GB eli 4096 MB. Tämän jälkeen jatkoin aiemman salasanatiivisteen murtamisyritystä ja ajoin uudelleen komennon, joka edellisellä yrittämällä tyssäsi muistikapasiteetin rajallisuuteen:

$ hashcat -m 0 '6b1628b016dff46e6fa35684be6acc96' rockyou.txt -o 5a-solved

Nyt muistia oli tarpeeksi ja Hashcat sai tehtävänsä suoritettua:

Tulosteen kohdassa ”Dictionary cache built” oli koottu tiedot murtautumiseen käytetystä sanakirjasta. Tulosteen loppupuolella mainittiin, että murtautumisessa oli käytetty Hashcat-työkalua, statuksena oli cracked eli salasanatiiviste oli murrettu ja tähän oli tosiaan päästy hash-tyyppi 0:aa eli MD5:ttä käyttämällä.

Cat-komennolla kaivoin esille tiedoston ”5a-solved”, jonne Hashcat oli tallentanut murtamansa salasanatiivisteen ja sanakirjan sanan, jonka tiiviste vastasi murrettavaa tiivistettä:

$ cat 5a-solved

Salasana oli summer, kuten pitikin Karvisen esimerkkitapauksen perusteella (Karvinen 2023 b).

b) Salainen, mutta ei multa (dirfuzt-1)

Tehtävänä oli ratkaista dirfuzt-1 artikkelista Find Hidden Web Directories – Fuzz URLs with ffuf (Karvinen 2023 c). Vinkkien perusteella pitäisi löytyä admin-sivu ja versionhallintaan liittyvä sivu.

Tein tehtävälle uuden hakemiston nimeltä ”fuzz”:

$ mkdir fuzz
$ mkdir fuzz

Latasin dirfuzt-1 -tiedoston artikkelissa mainitusta osoitteesta ja purin paketin:

$ wget https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/dirfuzt-1
$ chmod u+x dirfuzt-1
$ ./dirfuzt-1

Siirryin Firefox-selaimessa osoitteeseen http://127.0.0.2:8000, jolloin ikkunaan aukesi sivu:

Harjoituspalvelin oli siis käynnissä.

Avasin toisen terminaalin, jotta pystyin jatkamaan harjoitusta pysäyttämättä harjoituspalvelinta. Asensin Ffuf-työkalun tämän raportin x-tehtävässä olevan tiivistelmän mukaan:

$ wget https://github.com/ffuf/ffuf/releases/download/v2.0.0/ffuf_2.0.0_linux_amd64.tar.gz
$ tar -xf ffuf_2.0.0_linux_amd64.tar.gz
$ ./ffuf

Komennolla ”$ ./ffuf” tulostui myös tieto Ffuf-työkalun versiosta sekä pitkä lista erilaisia asetusvaihtoehtoja.

Seuraavaksi latasin common.txt-verkkopolkusanalistan, joka on osa Daniel Miesslerin ja kumppaneiden kokoamaa Seclists-sanalistakokoelmaa:

$ wget https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/common.txt

Kun common.txt oli ladattu virtuaalikoneelleni, tarkistin vielä tulostamalla listan 10 ensimmäistä riviä sekä listan rivien lukumäärän, että tiedoston lataus oli onnistunut:

$ head common.txt
$ wc -l common.txt

Lista sisälsi 4715 riviä, kuten pitikin, ja ensimmäisiksi riveiksikin tulostui oikealta kuulostavia hakemistojen nimiä, kuten .cache ja .git.

Nyt, kun Kali-virtuaalikoneelleni oli asennettu kaikki, mitä Fuff-työkalun ja common.txt-verkkopolkusanalistan käyttäminen vaativat, irrotin virtuaalikoneen julkisesta Internetistä kytkemällä NAT-adapterin pois päältä. Varmistin Firefox-selaimessa, että harjoituspalvelin osoitteessa http://127.0.0.2:8000/ toimi edelleen mutta google.fi ei auennut, joten saatoin jatkaa turvallisesti harjoitusta.

Yritin fuzzata Ffuf-työkalulla harjoitusverkkopalvelimen:

$ ./ffuf -w common.txt -u http://127.0.0.2:8000/FUZZ

-w = käytetään sanalistaa common.txt
-u = kohde-url on http://127.0.0.2:8000/FUZZ

Salaisia verkkopolkuhakemistoja löytyi suuret määrät, yllä olevassa kuvakaappauksessa näkyvillä vain muutamia ensimmäisiä löydöksiä. Kun skrollasin listaa läpi, silmiin osui mielenkiintoiselta vaikuttavia hakemistoja kuten .passwd ja Admin. Lista oli kuitenkin niin pitkä – luultavasti tuhansia rivejä – että sen tutkiminen manuaalisesti olisi ollut liian työlästä.

Testasin Firefoxissa, mitä tapahtuu, jos yritän avata osoitteen http://127.0.0.2:8000/Admin ja http://127.0.0.2:8000/.passwd, mutta ei tapahtunut yhtään mitään. Edelleen ikkunassa luki sama teksti (Nothing, nill, …) kuin käynnistäessäni harjoituspalvelimen.

Koska moni salainen verkkopolkuhakemisto näytti olevan kooltaan 154 (Rissanen 2023), suodatin ne pois nähdäkseni, mitä jää jäljelle:

$ ./ffuf -w common.txt -u http://127.0.0.2:8000/FUZZ -fs 154

Tämän jälkeen tuloksia olikin miellyttävämpi lukea, kun tutkittavia vaihtoehtoja oli enää 7 kpl:

Tulosten perusteella admin-sivu löytynee osoitteesta http://127.0.0.2:8000/wp-admin, ja näin tosiaan olikin:

Veikkasin hakemiston .git liittyvän versionhallintaan ja siirryin kokeeksi osoitteeseen http://http://127.0.0.2:8000/.git/, ja arvaukseni näytti osuneen oikeaan:

c) John the Ripperin asennus ja sen toiminnan testaaminen murtamalla esimerkkitiedoston salasana

Aiemmassa x-tehtävässä kirjoitin tiivistelmän Tero Karvisen artikkelista ”Crack File Password With John”. Tein tämän c-tehtävän tiivistelmäni mukaisesti VirtualBoxin Kali-virtuaalikoneellani.

Tein John the Ripper -työkalulle kirjastoineen ja apuohjelmineen oman hakemiston nimeltä ”john_the_ripper” ja asensin tarvittavat ohjelmat ja kirjastot:

$ mkdir john_the_ripper
$ cd john_the_ripper
$ sudo apt-get -y install micro bash-completion git build-essential libssl-dev zlib1g zlib1g-dev zlib-gst libbz2-1.0 libbz2-dev atool zip wget

 

Jostain syystä paketti zlib-gst ei asentunut, mutta myöhemmin selviää, onko se este John the Ripperin käytölle.

Latasin kopion John the Ripper -työkalun viimeisimmästä Jumbo-versiosta:

$ git clone --depth=1 https://github.com/openwall/john.git

Kopio ladattiin ”john”-nimiseen hakemistoon, ja kopiointi näytti onnistuneen 100 %:sti.

Siirryin hakemistoon ”john/src” komennolla

$ cd john/src/

ja suoritin konfiguroinnin:

$ ./configure

Konfigurointi tyssäsi kuitenkin siihen, ettei OpenSSL:n headereita löytynyt. Ratkaisuna tähän ohjeistettiin joko asentamaan ne tai tekemään konfigurointi ilman niitä. Päädyin kokeilemaan jälkimmäistä vaihtoehtoa ja ajoin komennon

$ ./configure --without-openssl

Tällä konfigurointi saatiin vietyä loppuun asti:

Konfiguroinnin päätteeksi ohjeistetaan kokoamaan John the Ripper komennolla

$ make -s clean && make -sj4

ja tein työtä käskettyä. Ympäristön kokoamisessa kesti pari minuuttia, mutta odoteltuani aikani prosessi tuli valmiiksi seuraavin saatesanoin: ”Make process completed.

Siirryin hakemistoon ”john/run/”, jotta voin käynnistää ”john”-nimisen hakemiston ajamisen, ja tarkistin, että ”john”-hakemisto tosiaan löytyy sieltä:

$ cd ..
$ cd run
$ ls

Kun hakemisto ”john” löytyi ”run”-hakemistosta muun sisällön joukosta, ajoin sen:

$ john

Nyt John the Ripper -työkalu oli käynnissä. (Lisäys 15.5.2023: Komento $ john ajaa Kalissa valmiina olevan version John the Ripperistä. Ohjelma pitäisi ajaa komennolla $ $HOME/john/run/john, jotta Kali ajaa viimeisimmäksi asennetun version John the Ripperistä.)

Tarkoitukseni oli luoda hakemistoon salasanalla suojattu zip-tiedosto, mutta koko virtuaalikoneeni jumittui John the Ripperin käynnistyksen myötä niin, että minun piti käynnistää virtuaalikone välillä uudestaan.

Loin hakemistoon ”john_the_ripper/john” uuden kansion nimeltä ”Salainen”, tein siitä zip-tiedoston (hiiren oikean napin valikosta ”Create archive”) ja asetin zip-tiedostolle salasanan ”Toukokuu2023”.

Tämän jälkeen avasin taas terminaalin, käynnistin John the Ripper -työkalun ja jatkoin siitä, mihin jäin ennen virtuaalikoneen uudelleenkäynnistystä.

Palasin ”john”-hakemistoon ja yritin purkaa äsken salasanalla salaamani zip-tiedoston:

$ cd ..
$ unzip Salainen.zip

$ ./run/zip2john Salainen.zip >Salainen.zip.hash

Epäilin tulosteen perusteella, olikohan John the Ripper sittenkään saanut zip-tiedostoni salasanaa selville, mutta tarkistin kuitenkin ”john”-hakemiston sisällön ja sinne oli kuin olikin ilmestynyt uusi tiedosto nimeltä Salainen.zip.hash, jonne oli ilmeisesti tallennettu salatun zip-tiedoston salasanatiiviste.

Käynnistin tiedoston Salainen.zip.hash murtamisen komennolla

$ ./run/john Salainen.zip.hash

Odotin, että vastauksena terminaaliin olisi tulostunut murrettu salasana eli Toukokuu2023. Sen sijaan sain todeta, että jotain meni pieleen, sillä John the Ripper oli kyllä yrittänyt selvittää salasanaa mutta se ei ollut ladannut yhtään salasanatiivistettä:

Kokeilin vielä Karvisen artikkelissaan käyttämää esimerkkitiedostoa (Karvinen 2023 b), jonka latasin virtuaalikoneelleni ja yritin sitten murtaa sen salasanan kuten edellä:

$ wget https://TeroKarvinen.com/2023/crack-file-password-with-john/tero.zip
$ unzip tero.zip

Salatun zip-tiedoston purkaminen ei onnistunut, koska en osannut antaa pyydettäessä oikeaa salasanaa. Sen sijaan zip-tiedoston salasanatiivisteen murtaminen John the Ripperillä tuotti tulosta:

$ ./run/zip2john tero.zip >tero.zip.hash
$ ./run/john tero.zip.hash

Tällä kertaa zip-tiedoston salasanan murtaminen onnistui ja John the Ripper osasi kertoa salasanan olevan butterfly. Ilmeisesti itse tekemäni zip-tiedosto ei siis syystä tai toisesta tallentanutkaan salasanaa, vaikka luulin sen tehneen niin, sillä John the Ripper ei kaiketi ollut löytänyt mitään salasanatiivistettä murrettavaksi. Tyhjästä on tietysti paha nyhjästä.

d) Jurpon sivut

Tehtävänä oli muodostaa oma hyökkäyssanakirja Jurpon verkkosivujen pohjalta ja murtaa salasanatiiviste 83f1cf89225005caeb4e52c9ea9b00e0, jonka tiedetään olevan peräisin Windows-käyttöjärjestelmästä ja hash-tyypin NTLM.

Tein tehtävälle oman hakemiston nimeltä ”jurpo”:

$ mkdir jurpo 
$ cd jurpo

Kopioin liitteenä olevan Jurpon kotisivujen tekstin tekstitiedostoon:

$ micro jurponsivut.txt

Liitin Micro Editorissa Jurpon kotisivujen tekstin tiedostoon, tallensin Ctrl + s ja suljin Micro Editorin Ctrl + q. Tämän jälkeen cat-komennolla avasin tekstitiedoston terminaaliin siten, että cat korvasi tekstissä olevat välilyönnit rivinvaihdolla ja poisti tyhjät rivit:

$ cat jurponsivut.txt |tr ' ' '\n' |grep -v '^$'

|tr ' ' '\n' = korvaa välilyönti rivinvaihdolla
|grep -v '^$' = poista tyhjä rivi

Kopioin sanalistan, avasin tiedoston Micro Editorissa, liitin kauniisti omille riveille jaotellut sanat alkuperäisen tekstin tilalle ja tallensin tiedoston. Näin olin muodostanut sanalistan tiedostoon jurponsivut.txt.

Seuraavaksi yritin kaivaa hashid:llä salasanatiivisteen Hashcat Moden, sillä pelkkä hash-tyyppi NTLM ei vielä kertonut riittävästi:

$  hashid -m 83f1cf89225005caeb4e52c9ea9b00e0

Hashid:n tulosteesta sain tietää, että NTLM:n Hashcat Mode on 1000. Tämän jälkeen yritin murtaa Hashcatillä salasanatiivisteen hyödyntäen sanalistaa jurponsivut.txt:

$ hashcat -m 1000 '83f1cf89225005caeb4e52c9ea9b00e0' jurponsivut.txt -o jurpo-solved

Hashcat kävi sanalistan läpi ja ilmoitti murtaneensa tiivisteen. Tulos oli tallennettu tiedostoon ”jurpo-solved”, josta selvisi salasanan olevan MasterLazerMan.

e) PortSwigger labs -tehtäviä

Lab: Reflected XSS into HTML context with nothing encoded

Valitsin toiseksi tehtäväksi helpohkon harjoitustehtävän cross-site scriptingistä, koska en ollut vielä harjoitellut sitä lainkaan PortSwiggerissä. Laboratoriotehtävän kerrottiin sisältävän yksinkertaisen, heijastuneen sivustojen välisen komentosarjahaavoittuvuuden hakutoiminnossa ja kehotettiin ratkaisemaan tehtävä suorittamalla sivustojen välinen komentosarjahyökkäys, joka kutsuu hälytystoimintoa (alert).

Kun aloitin laboratoriotehtävän, ikkunaan aukesi blogi. Koska haavoittuvuuden oli mainittu oelvan hakutoiminnossa, etsin blogisivulta hakukentän.

Blogisivulla näkyvän artikkelin otsikko oli ”The First Ever Truly Eco Car Has Made It To Market”, joten valitsin hakusanaksi car, jotta saisin ainakin yhden hakutuloksen. Haun seurauksena selaimen osoiterivillä oleva verkkosivun osoite muuttui ja osoitteen loppuun tuli hakutoiminto, jonka kautta hakuja – ja oikeastaan kaikenlaista muutakin – voisi tehdä suoraan selaimen osoiteriviltä:

https://0af0001603d3729e8065352c009c009a.web-security-academy.net/?search=car

Etsin Cross-site scriptingin cheat sheetistä sopivaa skriptiä, jota voisi kokeilla hakutoimintoon. Tehtävänannossa mainittiin alert, joka saattoi olla vihje siihen, minkälaisella skriptillä hyökkäys onnistuisi. Kokeilin syöttää hakuun skriptiä

<script onerror=alert(1) src=/></script>

sillä skriptin piti kaiketi toimia siinä tilanteessa, jos resurssi ei lataudu tai aiheuttaa virhetilanteen (PortSwigger Researh s.a. a). Blogin hakutoiminnossa skripti ei kuitenkaan tehnyt mitään, vaan sain ilmoituksen, ettei hakutuloksia löytynyt:

Katsoin PortSwiggerin vinkin tehtävän ratkaisemiseen, ja PortSwigger vinkkasikin hyödyntämään hyvin samantyylistä mutta hieman yksinkertaisempaa skriptiä:

<script>alert(1)</script>

Syötin tämän blogin hakukenttään ja klikkasin Search-painiketta, jonka seurauksena sain selaimeen epämääräisen ilmoituksen pop up -ikkunassa:

Näköjään cross-site scripting -hyökkäys blogin hakukentän kautta onnistui näin yksinkertaisella koodilla, ja tehtävä oli siis suoritettu.

Lab: Stored XSS into HTML context with nothing encoded

Päätin tehdä vielä toisenkin PortSwiggerin laboratorioharjoituksen cross-site scriptingistä, jotta pääsen paremmin jyvälle, mistä tässä hyökkäystavassa on kyse. Tässä toisessa tehtävässä HTML-kontekstiin oli tallennettu cross-site scripting ilman koodausta. Laboratoriotehtävän kerrottiin sisältävän kommentointitoiminnossa tallennetun sivustojen välisen komentosarjahaavoittuvuuden, ja tehtävän ratkaisemiseksi tuli lähettää kommentti, joka kutsuisi hälytystoimintoa (alert) blogiviestiä tarkasteltaessa.

Tässäkin tehtävässä hyökkäyksen kohteena oli blogi. Kommentointitoiminto löytyy useimmiten blogipostausten lopusta, joten avasin blogin etusivulla ensimmäiseksi löytämäni postauksen:

Skrollasin postauksen loppuun, josta löytyi odotetusti Comments-osio ja mahdollisuus kommentoida postausta:

Avasin hiiren oikealla painikkeella blogisivun lähdekoodin ja etsin koodista sanaa comment:

Näin löysin lähdekoodista kommentointiosion ja kohdan ”Leave a comment”. Lähdekoodin perusteella kommentointitoiminto on textarea eli tekstikenttä, mitä arvelinkin. Etsin cross-site scriptingin cheat sheetistä Chrome-selaimessa toimivia XSS-hyökkäyksiä, joissa esiintyy textarea. Hakutuloksissa monessa hyökkäyskoodissa mainittiin joko animaatio tai CSS, joista ei nyt ollut kyse. Lopulta päädyin kokeilemaan koodia, joka toimii siinä tapauksessa, että elementillä on jokin fokus (PortSwigger s.a. a). En oikein ymmärtänyt, mihin fokus viittasi, mutta päätin kokeilla, olisiko kommenttikentällä riittävästi fokusta koodin ajamiseen:

<textarea autofocus onfocusin=alert(1)>test</textarea>

Yllättäen tehtävä ratkesikin tällä koodilla, eikä minun tarvinnut ratkaisun löytämiseksi katsoa lainkaan edes PortSwiggerin virallisia vinkkejä – edistystä havaittavissa!

Lähteet

Halonen, A. 2023. My current Pentest Cheatsheet. Luettavissa: https://github.com/therealhalonen/penetration_testing/blob/master/h5/personal_cheatsheet.md. Luettu: 15.5.2023.

Karvinen, T. 2022. Cracking Passwords with Hashcat. Luettavissa: https://terokarvinen.com/2022/cracking-passwords-with-hashcat/. Luettu:13.5.2023.

Karvinen, T. 2023 a. Penetration testing course 2023. Luettavissa: https://terokarvinen.com/2023/tunkeutumistestaus-2023-kevat/. Luettu: 11.5.2023.

Karvinen, T. 2023 b. Crack File Password With John. Luettavissa: https://terokarvinen.com/2023/crack-file-password-with-john/. Luettu: 12.5.2023.

Karvinen, T. 2023 c. Find Hidden Web Directories – Fuzz URLs with ffuf. Luettavissa: https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/. Luettu: 15.5.2023.

PortSwigger Researh s.a. a. Cross-site scripting (XSS) cheat sheet. Luettavissa: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet. Luettu: 13.5.2023.

Rissanen, J. 2023. h5-Final-Countdown. Luettavissa: https://github.com/JRissanen/h5-Final-Countdown. Luettu: 15.5.2023.

Superuser.com 2015. How to change the RAM allocated to an OS in VirtualBox? Luettavissa: https://superuser.com/questions/926339/how-to-change-the-ram-allocated-to-an-os-in-virtualbox. Luettu: 14.5.2023.

Artikkelin osioita x ja y on täydennetty sekä osiot b, c ja f lisätty 15.5.2023.

Kommentoi

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *