Tunkeutumistestaus läksyt viikko 7 – Caius Juvonen

Tällä kertaa teemme tämän kurssin viimeiset läksyt! Olemme päässeet pitkälle ja oppineet paljon, ja toivon että pääsen hyödyntämään näitä taitoja pian tulevaisuudessa positiivisesti. Linkit teron kurssiin ja läksyihin tässä: http://terokarvinen.com/2020/tunkeutumistestaus-kurssi-pentest-course-ict4tn027-3003/ . Sama linkki myös lopussa.

a) Web fuzzing. Asenna fuff ja käytä sitä valitsemaasi harjoitusmaaliin. Kokeile eri tyyppisiä fuzzingeja, fuff kohteiksi voi laittaa esimerkiksi kansiot, alidomainit, parametrien nimet, parametrien arvot tai lomakkeiden käsittelijät. Asenna itse tarvittavat harjoitusmaalit.

Päätin asentaa juice-shopin dockerin avulla koska kuulin huhua että se olisi hyvä kohde fuzzaukseen. Lähdetään liikkeelle juice-shopin asennuksella:

Ensinnäkin, meillä pitää olla docker asennettuna. En nyt käy sitä tässä läpi, sillä minulla on jo docker. Kun olemme asentaneet dockerin, voimme asentaa juice-shopin näillä komennoilla:

sudo systemctl start docker
sudo docker pull bkimminich/juice-shop
sudo docker run -d -p 3000:3000 bkimminich/juice-shop

Ensimmäiseksi käynnistämme dockerin systemctl avulla. Seuraavaksi otamme docker-imagen pullin avulla, eli tämä on se “asennus”. Viimeinen komento käynnistää juice-shopin laitteellamme portille 3000. Jos haluamme nyt siis uudestaan käynnistää dockerin, käytämme vain ensimmäistä ja viimeistä komentoa (olettaen että docker ei ole vielä päällä, jos on, niin vain viimeinen riittää). Tämän jälkeen juice-shopin pitäisi pyöriä localhostilla portilla 3000. http://localhost:3000 näyttää tältä:

Pieni huomio on että mikäli foxyproxy on selaimessa laitettu toimimaan localhostiin, pitää sen asetukset ottaa pois mikäli proxyä ei olla laitettu toimimaan ensin kyseiseen porttiin, eli kannattaa se ottaa pois päältä (itsellä kävi näin ja olin hetken hämmentynyt).

Ffufilla voi tehdä monia erilaisia asioita, joten aloitan jostakin simppelistä kuten directory discoverystä. Käytin tässä lähteenä tätä: https://github.com/ffuf/ffuf (Lähde 1). Voimme käyttää komentoa

./ffuf -c -w /usr/share/dirbuster/wordlists/directory-list-2.3-small.txt -u http://localhost:3000/FUZZ/ -fs 1925

Olen asentanut ffufin ohjelmana ja joudun käyttämään sitä myös näin. -c vain värittää outputin eli kyseessä ei ole mikään pakollinen parametri, -w on pathi meidän wordlistaan jota käytämme directoryjen löytämiseen (käytin default wordlistaa joka tulee kalin tai siis dirbusterin mukana), ja -u on hosti. Hyvä huomata että urlin perään on lisätty /FUZZ/ joka on siis pakollista. -fs 1925 filteröi kaikki löydöt joiden size on 1925, sillä huomasin että se on false positive ja jos sitä ei ole ffuf kertoo että jokaikinen mahdollinen sana on directory websitellä. Tuolla parametrillä saa kaikki false positivet pois hämäämästä.

Ffuf on ikävä kyllä erittäin hidas tähän. Sillä meni yli puoli tuntia käydä noin 81 tuhatta eri sanaa läpi tässä hyökkäyksessä. Ehkä käytin sitä väärin, mutta gobuster saavuttaa saman tuloksen paljon nopeammin. Tulokset kuitenkin toimivat, mutta isommalla sanalistalla tässä menisi ikuisuus kun odottaisin vastausta. Tulokset tässä:

Kävin muutamassa noista, ja näyttivät toimivan. Varsinkin /ftp oli hauska, sillä sinne oli laitettu “confidential” asiakirjoja kaikkien luettaviksi. Löysin myös jotain tiedostoja joiden nimessä oli malware, mutta en lähtenyt niitä tutkimaan sen enempää koska tässä oli vain tarkoitus tutkia tuota ffufia ja sen käyttöominaisuuksia.

Tämän jälkeen oli tarkoitus kokeilla jotain muuta, mutta tässä välissä haluaisin sanoa että työkalu on hieman epäselvä ja myöskin viimeistelemätön, ja käyttäisin mielellään jotain muuta työkalua tässä. Päätin tuolta samalta github pagelta ottaa toisen esimerkin, tällä kertaa POST data fuzzing.

Juiceshopissa on login page, joten tämä on meidän kohteemme. Kokeilin miten SQL injektiot toimisivat, joten tein seuraavan komennon:

./ffuf -w /usr/share/wordlists/wfuzz/Injections/SQL.txt -u http:/192.168.56.101/mutillidae/index.php?page=login.php -X POST -d "username=admin\&password=FUZZ"

Tarkkasilmäinen lukija on tässä kohtaa varmasti huomannut, että emme hyökkää juice shoppia vastaan enään. Tämä sen takia että parametri -X POST toimii vain palveluihin jotka ovat portilla 80: juice shop on portilla 3000. En tiennyt miten saisin tämän toimimaan, joten vaihdoin kohdetta metasploitable-laitteeseen. Ja siis tuo -X parametri spesifioi meidän HTTP methodin, login pagea vastaan tietysti tuo POST on olennainen (GET on default).

Saamme tälläisen tuloksen:

ffuf on siis kokeillut kaikenmaailman SQL injektiota login pagea vastaan, joka käsittääkseni toimii. Oma mutillidaeni on sen verran rikkinäinen että siinä en saa loginia toimimaan vaikka kokeilisin oikeilla salasanoilla, mutta oletan että tämä hyökkäys silti onnistui. Eli siis, ffuf kokeili login pageen erilaisia sql injektioita meidän wordlistasta.

En päässyt ihan täysin hyödyntämään tätä työkalua sen täyteen potentiaaliin, mutta voin sanoa että fuzzerit vaikuttavat erittäin hyödyllisiltä työkaluilta jos haluaa nopsaan automatisoida heikkouksien etsimisen, vaikka ei siihen kannatakkaan luottaa aina. Fuzzerit antavat paljon false positiveja ja jättävät välillä oikeita vulnerabilityjä huomaamatta, mutta tällä pääsee alkuun mikäli pitää korkata vaikka joku web applikaatio. Tulen varmasti käyttämään fuzzereita tulevaisuudessa, mutta en ole varma käytänkö tätä kyseistä työkalua vaikka wfuzzin yli.

b) Muistilappu. Kokoa vanhoista harjoitustehtävistä tiivis, sähköinen muistilappu. Laita komennoista kokonaiset, toimivat esimerkit. Tavoitteena on tehdä sellainen muistilappu, josta on itsellesi hyötyä, kun teet tunkeutumistestausta käytännössä.

Olen ennenkin tehnyt tämmöisiä cheatsheet tyyppisiä muistilappuja ja tulen jakamaan tässä niitä hieman eri kategorioihin.

Tiedustelu/recon:

nmap // Porttiskanneri, yksi tärkeimmistä työkaluista mitä on. Tulee Kalin mukana, man nmap. Esimerkkikomento:

nmap -A -oA nmap_skan 10.10.10.100

Tämä skannaa osoitteen 10.10.10.100 ja tekee myös version detectionin, script skannin ja OS detectionin. Eli saamme kaiken mahdollisen tiedon kohteesta. Tulokset tallennetaan 3 eri formattiin tiedostoon nimeltä nmap_skan -oA parametrin avulla. HUOM. Port skannaus on äänekästä toimintaa ja suomessa myös laitonta! Kaikki skannit kannattaa tallettaa tiedostoon, koska et halua joutua tekemään niitä uudestaan.


Gobuster // Brute force työkalu jota voi käyttää directoryjen löytämiseen, gobuster toimii terminaalissa ja dirbuster on GUI versio, muuten sama ohjelma kyseessä. Jos ei tiedä mitä kannattaa tehdä web applikaation korkkaamiseksi, on hyvä aloittaa gobusterskannilla. Esimerkkikomento:

gobuster dir -v -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -u https://kohde.com

Hyvä huomata että dirbusterin mukana tulee directory sanalistoja jota voi käyttää myös gobusterin kanssa, sijaitsevat tuolla /usr/share/dirbuster kansiossa. Huom, on tärkeää laittaa sana "dir" gobusterin jälkeen, sillä tuo kertoo mitä moduumia käytetään. Gobuster -h lisätietoja varten. -w on wordlist path, -v on verbose mode ja -u on kohteen url. 

Huom. Kannattaa myös vaikka manuaalisesti käydä kurkkaamassa robots.txt tiedosto ja katsoa mitä sinne on laitettu. Jos onnistaa siellä voi olla suoraan vaikka admin login page. 


nikto // niktoa voi käyttää vaikka vanhojen komponenttien havaitsemiseen webbi applikaatiossa, jolla voi saada viittaa siitä mistä kannataisi lähteä liikkeelle. Esimerkkikomento:

nikto -Display 1234V -Tuning 6x -o niktoskan.html -Format htm -host 10.10.10.165

niktoa on hieman vaikeampi käyttää (tai siis, siinä on paljon parametrejä), mutta sen man sivu selittää kaiken aika hyvin. Tässä esimerkkikomennossa on otettu Display asetukset 1234 ja V mukaan, Tuningissa kaikki paitsi asetus 6 (x on reverse, eli kaikki paitsi spesifioitu) ja -o tallentaa outputin tiedostoon nimeltä niktoskan. Myös output tiedoston format on kerrottava, ja se on tässä tapauksessa html (htm oikea syntaksti -formatissa, nikto toimii niin). -Host:issa vain kerrotaan meidän kohteemme. 

Tämä on gobusterin kanssa toinen työkalu mitä käyttäisin web applikaation tutkimiseen heti alkuun. On myös muistettava että myös nmap on tärkeä webbiservereiden kanssa! 


mitmproxy // Mitmproxy on välimiesproxy jolla voimme interceptata get/post requesteja ja muokata niitä ennenkuin lähetämme niitä eteenpäin. Tämän avulla myös vaikka command injection on mahdollista, sillä voimme muokata post requestia miten haluamme. Itse käytän mitmproxyn kanssa myös foxyproxya joka tekee sen käytöstä helpompaa. Pieni tutoriaali miten mitmproxyä käytetään:

Ensinnäkin laita foxyproxy asetukset kuntoon ja asenna mitmproxy. Tero Karvisella on hieno artikkeli missä hän kuvaa miten tämä toimii: http://terokarvinen.com/2019/mitmproxy-on-kali-and-xubuntu-attack-and-testing (Lähde 2). 

Kun mitmproxy on päällä ja toimii, niin tässä muutama neuvo sen käyttöön liittyen:

Mitmproxy käynnistetään tyyliin "mitmproxy -P (portti tähän)

-Painamalla nappia "i" pystyy asettamaan intercept filterin, eli voimme kaapata kaikki paketit jotka täyttävät tietyt ehdot (esim POST requestit). Jos kaappaa kaiken sivulta tulevan niin sivusto ei tietenkään lataa vaikka uutta nettisivua ennenkuin päästät datan eteenpäin.

-A päästää kaikki napatut paketit eteenpäin, pieni a jonkun tietyn. 

-Valitsemalla jonkun tietyn flown ja painamalla "e" pystyy muokkaamaan asioita sen sisällä. Tämän avulla voimme esimerkiksi tehdä command injectionin mikäli sivu sen sallii (note: on siis haavoittuvainen). 

Mielestäni nämä olivat kaikista tärkeimmät napit mitmproxyn käytössä. Huom: http requestit pitää interceptata mikäli niitä haluaa muokata, sillä eihän niitä voi muokata sen jälkeen kun ne on jo lähetetty eteenpäin. Mitmproxyn avulla voimme käyttää myös muita työkaluja, kuten vaikka hydraa joka toimiakseen tarvitsee välimiesproxysta saatuja tietoja. 

Brute force

Kaksi työkalua jotka tulevat ehdottomasti mieleen ovat hydra ja hashcat.

Hydra // Hydraa käytetään enemmänkin web brute forcessa, eli jos löydetään vaikka wordpress login page voimme käyttää hydraa sen brute forceemiseen. Hydra tulee kalin mukana ja siinä on olemassa myös sen oma man-page. Esimerkkikomento:

hydra -vV -L fsocity.dic.uniq -p wedontcare -o usernames.txt 192.168.56.104 http-post-form '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=Invalid username'

Aika pitkä komento, mutta ei niin monimutkainen lopulta! -vV on vain verbose, -L on sanalista mitä käytämme loginin selvittämiseen, -p on salasana mitä käytämme (iso P käyttää salasanalistaa, vice versa pienen l kanssa), -o tallettaa tiedot tiedostoon, IP pitää myös antaa mutta se ei tarvitse omaa parametriään ja lopuksi tarvitsemme http-post-formin. Tämän voi saada esimerkiksi mitmproxyn avulla. Hydran kanssa toimimiseen on suositeltavaa käyttää jotain välimiesproxyä noiden post requestien saamiseen. 


Hashcat // Toisinkuin hydra, hashcattia käytetään lähinnä hashien murtamiseen ja tämä tapahtuu siis ihan paikallisesti. Jos saat salasanahashin, kannattaa käyttää hashcattia sen murtamiseen sillä hashcat pystyy käyttämään GPU:ta, nopeuttaen prosessia huomattavasti. Ei toimi virtuaalisessa ympäristössä, kannattaa tehdä host koneella, toimii myös windows 10. Esimerkkikomento:

hashcat64.exe -m 0 -a 0 -w 3 -o cracked_battlefield.txt hashes/bfield.hash passwordlist/rockyou.txt

Tämä on suoritettu windows 10, joten tuo hashcat64.exe on miten kutsumme komennon. Linuxissa pelkkä hashcat riittää. -m 0 spesifioi mitä modea käytämme, ja tämä riippuu täysin hashin tyypistä, eli hashin tyyppi pitää ensin selvittää ennenkuin voimme lähteä sitä ratkomaan. -a päättää mitä hyökkäystapaa käytämme, 0 on dictionary attack eli salasanalista. -w on workload profile, mutta tämä ei toiminut kunnolla testatessani. Tarkoituksena on että workload profiililla voi säädellä kuinka paljon koneen tehoja hashcat käyttää. -o on output file, ja lopussa on vain tuo meidän hashitiedosto ja salasanalista mitä käytämme niiden murtamiseen. Man sivulta saa helposti lisää tietoa noista parametrin asetuksista. 

Exploiting

Tässä kuvataan miten voimme käyttää valmiita/itsetehtyjä exploitteja. Metasploit pääasemassa.

Metasploit // Metasploit on varmaan käytännöllisin työkalu jonkun exploitin käyttämiseen, eli tämä on mitr killchainissa kohta "weaponization". Metasploitin mukana tulee valmiiksi tuhansia eri moduuleita ja exploitteja, ja siihen voi ladata myös custom-made payloadeja.

Metasploitin käynnistämiseen kannattaa käyttää jotain tämänlaista skriptiä, koska monta eri asiaa pitää käynnistää samalla:

#!/bin/bash

systemctl start postresql
msfdb init
msfconsole

Voi nuo kolme komentoa myös yksitellen kirjoittaa, mutta näin säästyy hieman aikaa ja jos unohtuu vaikka joku noista niin ei jää mietityttämään sen enempää. Skriptin voi juosta helposti vaikka tyyliin: "sudo ./skripti". 

Pari hyödyllistä komentoa metasploitin sisällä:

- search // tällä voi etsiä moduuleita, esim "search vsftpd". 
- use // tämän avulla voi ottaa jonkun tietyn moduulin käyttöön, jos on käyttänyt searchia juuri ennen sitä numerot käyvät, muuten pitää kirjottaa koko moduulin path, esim "use exploit/unix/vsftpd_234_backdoor
- options // tätä kannattaa käyttää aina kun on ottanut moduulin/exploitin käyttöön, sillä se näyttää tarvittavat asetukset.
- set // Setillä voi laittaa asetukset kuntoon jostain moduulista. Jos moduuli esimerkiksi tarvitsee kohde-IP:n ja tämän asetuksen nimi on RHOSTS käyttäisit "set RHOSTS 10.10.10.100". 
- run/exploit // Kun kaikki asetukset ovat valmiita näillä voi juosta kyseisen exploitin/moduulin eli käynnistää hyökkäyksen. 

Olen lähinnä käyttänyt metasploitissa valmiiksi olevia hyökkäyksiä, eikä minulla ole kokemusta ihan hirveästi omien tekemisestä, joten jätän sen tähän mainitsematta kunnes olen päässyt tekemään lisää tämän tyyppistä toimintaa. 

Tässä ainakin suurin osa kurssillä käydyistä ohjelmista ja komennoista jotka ovat mielestäni hyödyllisiä. Tärkeintä on kuitenkin varmaan kyky oppia käyttämään uusia työkaluja, dokumentaation lukeminen + man sivut auttavat huomattavasti ja olen kurssin aikana oppinut käyttämään todella montaa eri työkalua aivan itse.

Post exploitatiota ei käyty kurssilla niin paljoa läpi, ja en osaa vieläkään enumerationia kauhean hyvin (tai siis, voin ehkä murtautua laitteeseen, mutta en kyllä osaa saada sillä roottia mikäli se ei tullut hyökkäyksen mukana). Tämän on varmaan jotain mitä minun kannattaa käydä läpi omalla ajalla sitten enemmän. Myös web applikaatiot kiinnostavat.

c) Viisauksia keräämässä. Silmäile muiden kotitehtäväraportit ja kerää uuden otsikon alle muistilappuusi kiinnostavimmat komennot. Muista lähteet.

Tuomo Kuure:

Käyn siis muiden kurssilaisten läksyjä läpi ja katson mikäli siellä olisi jotain uutta mitä en ole itse käyttänyt, ja kerään hieman tietoa siitä tähän.

Kävin ensin toisen kurssilaisen Tuomo Kuuren blogissa, ja huomasin siellä jotain jonka olin itse unohtanut: tshark. Tällä työkalulla voimme siis tarkkailla vaikka meidän omaa internetliikennettämme ja päätellä mikäli jokin on pielessä. Tämä kyseinen kohta löytyy Tuomon blogista täältä (Lähde 3).

sudo tshark -i (interface) 

Tshark on siitä käytännöllinen että sillä on helppo tarkailla verkkoliikennettä, jotta näemme mitä ohjelmamme oikeasti tekevät (ja varmistutaan siitä että porttiskannaus ei vahingossa vaikka lähde ulkopuoliseen osoitteeseen!).

Niko heiskanen:

Halusin myös lisätä Nikon hashcat käytön jossa hän lisäsi hashcattiin sääntöjä sanalistan lisäksi. Tämä vaikutti hyvin tehokkaalta tavalta käyttää hashcattia jotta saisimme enemmän irti jostain salasanalistasta. Linkki Nikon blogiin on tässä: https://heiskane.github.io/h6.html (Lähde 4). Tuo on myös missä tätä hashcat rulea on käsitelty.

Eli meillä on salasanalista ja rulelistan avulla voimme tehdä täysin uuden salasanalistan sen avulla. Tässä rulelistassa voi olla monia erilaisia sääntöjä, kuten vaikka että jokainen salasana on myös full CAPSilla tai että jos salasanan ensimmäinen kirjain ei ole isona, se tekee sen myös isona. On tietysti huomattava että säännöt lisäävät salasanojen määrää huomattavan määrän, joten ei kannata pistää jokaista mahdollista sääntöä jo valmiiksi suuren salasanalistan päälle.

Uuden salasanalistan voi luoda sääntölistan avulla seuraavasti: “.\hashcat64.exe -r .\rules\best64.rule –stdout .\rockyou.txt > rockyou2.txt“. Eri säännöt mitä sääntölistassa on mahdollista käyttää on lueteltu täällä: https://hashcat.net/wiki/doku.php?id=rule_based_attack (Lähde 5). Tämä on hyödyllistä sen takia että kapitalisaatio on tietysti erittäin tärkeää salasanojen kanssa, ja jos salasanalistassa on salasana “hunter2” mutta käyttäjä käyttääkin “HUNTER2” ei sitä voida crackata. Säännöillä voidaan kuitenkin lisätä nuo yleisimmät muutokset.

d) Viimeistely. Käy vanhat kotitehtäväsi läpi. Tarkista, että olet viitannut lähteisiin: tehtäväsivuun, kurssiin, muiden opiskelijoiden raportteihin, man-sivuihin, kotisivuihin ja ylipäänsä kaikkiin käyttämiisi lähteisiin. Lähdeviite tulee olla jokaisessa artikkelissa, jossa lähdettä on käytetty. Mikäli teet kotitehtäviisi lisää testejä tai kokeiluja, tee ne selkeästi jatkoksi uuden otsikon alle ja merkitse, milloin lisäykset on tehty. Historia ei voi enää muuttua.

Olin unohtanut aikaisista raporteistani linkin ainakin kurssisivuun, jonka menin lisäämään jokaiseen. Muitakin lähteitä oli puuttunut, mutta ne lisättyäni en nähnyt niin paljoa “virheitä” töissäni, ja olin ihan tyyväinen kaikkiin. Käyn usein tehtäväni läpi ennen julkistamista, joten kirjoitusvirheitä ainakin toivottavasti jää tekstiin usein hyvin vähän.

Lähteet:

Lähde 1: https://github.com/ffuf/ffuf

Lähde 2: http://terokarvinen.com/2019/mitmproxy-on-kali-and-xubuntu-attack-and-testing

Lähde 3: https://tqre.wordpress.com/2020/05/16/h7-cheat-sheet-and-web-fuzzing/

Lähde 4: https://heiskane.github.io/h6.html

Lähde 5: https://hashcat.net/wiki/doku.php?id=rule_based_attack

Caius Juvonen 2020

Leave a comment

Design a site like this with WordPress.com
Get started