h1: Vuohi, tappoketju ja pimeän verkon päiväkirjat
Tehtävät: Kurssisivu ja tehtävät
Lue ja tiivistä
OWASP 10 A03:2021 - Injection
- Injektitiot ovat kuten otsikkokin kertoo kolmanneksi yleisin hyökkäysvektori vuonna 2021
- Injektiot käsittelevät ohjelmistodataa tavoin joka ei ole tarkoitettu injektion syöttäjälle
- Injektiolle alttiit ohjelmat mm:
- eivät validoi, filtteröi tai sanitarisoi käyttäjäsyötteitä
- mahdollistavat väärän datan vastaanottamisen
- Suojatumista varten data on erotettava komennoista ja kyselyistä
- Oma idea: periaate on tuttu ja SQL-injektioita on tullut joskus kokeiltua WebGoatilla.
Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains
- Lockheed Martin esittelee Intelligence-Driven Computer Network Defensen teorian ja empirian avulla artikkelissa.
- Varautumista tiedustelua tai erittäin määrätietoista hyökkääjää vastaan joka on valmis käyttämään aikaa ja resursseja hyökkäyksensä toteuttamiseen, koskee yleensä valtioita tai erittäin arvokkaita yrityksiä.
- Cyber Kill Chain on yhtä vahva kuin heikoin lenkkinsä ja sen voi katkaista missä tahansa ketjun vaiheessa hyökkääjän torjumiseksi.
- Hyökkäyksen vaiheet: Reconnaissance, Weaponization, Delivery, Exploitation, Installation, C2 (Command and Control) ja Actions on Objectives (tässä vaiheessa hyökkääjä saavuttaa tavoitteensa)
- Oma idea: vaikuttaa että kyseessä on paremminkin tiedustelupalveluiden ja todella korkean tason toimijoiden varautumisesta ja ongelmista, mutta tappoketjua ja analyysia voi kyllä soveltaa matalammankin tason ja omassa toiminnassa.
Darknet Diaries podcast
- Jakso 69: Human Hacker
- Käsittelee huijareita ja social engineeringiä ja phishingiä.
- Vieraana Christopher Hadnagy joka kertoo jännittäviä tarinoita siitä kuinka he ovat murtautuneet erilaisiin järjestelmiin kollegansa kanssa, jamaikalainen pankki jota vartioivat haulikoilla varustautuneet skootterikuskit päätarinana.
- Lisäksi kuinka hän on perustanut yrityksiä ja kirjoittanut kirjoja ja mistä hän on löytänyt oppinsa.
- Oma idea: Valitsin jakson koska social engineeringiä ei käsitellä paljoa kurssilla mutta se on kuitenkin monesti osa hyökkäystä.
Kali Linux
Asennetaan Kali Linux VirtualBoxiin. Ladataan VM-tiedosto Kalin sivuilta jota opettaja suosittelee. Katsotaan asennusvideo. Luetaan asennusohjeita. Oikeastaan mitään näistä ei tarvittu koska kaikki oli valmiiksi asennettu oikein asennustiedostossa, joka vain importataan VirtualBoxiin.
Elämäni aikana mikään ei ole ollut näin helppoa tietokoneella. Jopa käyttäjänimi ja salasana on annettu VB:n Descriptionissa. Kokeillaan ensimmäiseksi verkkoyhteyttä virtuaalikoneessa, mennään sen selaimella osoitteeseen www.google.com. Kaikki toimii out-of-the-box, uskomatonta. Myös aiemmin ongelmia aiheuttaneet VB Guest Additions toimii ilman erillisiä toimenpiteitä.
Over The Wire
En ollut varma oliko ensimmäisessä tehtävässä tarkoitus (onko turvallista) ottaa suoraan omalta koneelta yhteyttä suoraan Over The Wire:n palvelimeen ja jahkailin tehtävän aloittamisen kanssa. Hyvä niin, otetaan yhteyttä nyt asennetulla Kalilla.
Vaihdetaan ensin Kalin näppäimistö English → Finnish.
Otetaan ssh-yhteys Over The Wireen.
ssh bandit0@bandit.labs.overthewire.org -p 2220
Tarjoaa fingerprinttiä: ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc. Lienee pakko hyväksyä vaikka ei ole mitään mihin verrata sormenjälkeä, eikö ohjeissa olisi voitu antaa se?
Saadaan yhteys, luetaan ohjeita. Kirjoitusoikeudet kotikansioon on kielletty, luodaan tarvittaessa wd /tmp/ kansioon komennolla
mktemp -d
Lukuoikeudet /tmp/ ja /proc/ kansioihin on kielletty. ASLR (Address-space Layout Randomization ASLR on kytketty pois päältä palvelimella.
Ohjeissa annetaan lisäksi seuraavat työkalut tiedostopolkuineen:
For your convenience we have installed a few usefull tools which you can find in the following locations:
- gef (https://github.com/hugsy/gef) in /usr/local/gef/
- pwndbg (https://github.com/pwndbg/pwndbg) in /usr/local/pwndbg/
- peda (https://github.com/longld/peda.git) in /usr/local/peda/
- gdbinit (https://github.com/gdbinit/Gdbinit) in /usr/local/gdbinit/
- pwntools (https://github.com/Gallopsled/pwntools)
- radare2 (http://www.radare.org/)
- checksec.sh (http://www.trapkit.de/tools/checksec.html) in /usr/local/bin/checksec.sh
Jatketaan harjoitusta. Readme-tiedostosta löytyy seuraava salasana. Vaihdetaan käyttäjä bandit0:sta bandit1:seen ja jatketaan näin harjoituksia aina viimeiseen harjoitukseen saaakka. Viimeisessä tasossa on kymmenen tiedostoa ja tuntuu turvallisimmalta avata ne editorilla, käytän nanoa. Käyn tiedostot yksitellen läpi manuaalisesti (ei varmaan paras idea?) ja löydän lopulta tiedostosta -file07 viimeisen salasanan.
Käytetään tuota seuraavissa tehtävissä sitten: Bandit6 Seuraavaa tehtävää varten myös pitää tutustua find-komentoon ja ihmisluettaviin tiedostoihin paremmin: Human-readable files
WebGoat
Asennetaan toinen Kali kone ihan vaan koska oli niin helppoa ja tähän toiseen voidaan asentaa WebGoat ja toisessa tehdä OverTheWiren harjoituksia. Katsotaan opettajan ohjeet: Install webgoat pentest practice target
Ajetaan Linux update ja asennetaan Java ja UFW ja käynnistetään palomuuri. Asennetaan WebGoat. Asennetaan Java JAR paketti.
Avataan osoite http://localhost:8080/WebGoat/ selaimessa ja rekisteröidään uusi käyttäjä. Tallennetaan WebGoat käyttäjätunnus (verkkovuohi) ja automaattisesti generoitu salasana tallentuu Kalin selaimeen (paitsi että salasanaa piti lyhentää koska WG hyväksyy max 10 kirjainta pitkiä slsnoja). Lopulta asennus on valmis.
WG & HTTP Basics
Suoritetaan ensin HTTP Basics
WG & Proxy palvelin
Tein tämän kohdan puolivahingossa. Huomasin ettei sitä tarvinnut tehdä mutta koska homma ei jumittunut ja olin aikaoptimisti niin asensin OWASP ZAP:n.
Ensin sallitaan proxy selaimessa
Sitten asennetaan OWASP ZAP
Muokataan WG ohjeiden mukaisesti proxy-palvelimen portiksi 8090 ja kokeillaan sitten käynnistää WG siinä, ainakin tulee lupaava varoitus:
Portin 8090 takaa tulee kuitenkin tieto Bad Format. Portin 8080 puolestaan toimii oikein. En ymmärrä miten porttimäärittelyt toimivat, mutta kuitenkin nyt ZAP näyttää kaappaavan liikennettä:
Löydän kirjautumistietoni koska arvaan että se on lähetetty POST-metodilla.
Sieltä löytyy selkokielinen salasanani ja käyttäjätunnukseni. Selain ei tällä kertaa kuitenkaan tarjonnut salasanaa automaattisesti sisäänkirjautuessa (ilmeisesti turvattomuudesta johtuen?) vaan se piti käydä hakemassa selaimen tiedoista.
Seurataan WG ohjeita ja filtteröidään WG sisäiset requestit ohjeiden mukaan pois. Sitten yritetään kaapata ja muokata pyyntöä ZAP:lla.
Siirrytään viimeiseen kohtaan Proxyissä. Tätä kohtaa ei kuitenkaan voi harjoitella ainakaan omalla asennuksellani, ehkä tämä vaatii vielä uuden ohjelman (WebWolf) asentamisen. Kuitenkin nyt HTTP Proxies näyttää vihreää valoa onnistuneen suorituksen merkiksi.
WG & Developer Tools
Seuraavaksi tehdään Developer Tools tehtävät. Ensimmäinen on että pitää ajaa Consolessa js-koodi joka hakee puhelinnumeron.
Seuravaksi selviää ettei Firefoxissa ole Chromen Sources-tabia vastaavaa tabia: https://stackoverflow.com/questions/40818112/is-there-an-equivalent-of-chromes-devtools-sources-panel-in-firefox-devtools Myös Network näyttää kovin erilaiselta, mutta kun ZAP on päällä on selaimen käyttäminen kovin hankalaa, joten yritetään selvitä FF:llä seuraavasta tehtävästä:
Onnistuu hyvin ja Network-osuus on suoritettu. Siirrytään SQL Injection osuuteen.
WG & SQL Injections
Ensimmäinen SQL-query onnistuu.
Myös toinen tehtävä onnistuu:
UPDATE Employees SET department='Sales' WHERE userid=89762
Kolmas: ALTER TABLE Employees ADD phone varchar(20)
Neljäs: GRANT ALTER TABLE TO UnauthorizedUser
SQL-perusteiden jälkeen on SQL-injektioiden vuoro. Ensimmäisestä tehtävästä selviän kokeilemalla useamman kerran, mutta kuvittelen (valheellisesti, kuten kohta selviää) ymmärtäväni mistä on kyse.
Your query was: SELECT * FROM user_data WHERE first_name = 'John' and last_name = '' or '1' = '1'
Seuraavassa tehtävässä olisi pitänyt oivaltaa, että Login_Count ei ole injektoitavissa, ja User_Id:hen ei tarvitse lainausmerkkejä. SQL-kyselypohja näytti tältä:
"SELECT * FROM user_data WHERE login_count = " + Login_Count + " AND userid = " + User_ID;
Ja vastaus tältä:
Your query was: SELECT * From user_data WHERE Login_Count = 0 and userid= 0 OR 1=1
En enää tässä vaiheessa tehtäviä koe olevani kärryillä asiasta. Heittomerkit tuntuvat vaihtelevat mielivaltaisesti tilanteesta toiseen. Tehtävien tekemiseen varattu aika rupeaa kuitenkin loppumaan ja tehtäviä riittää vielä jäljellä. Lisäksi pitäisi dokumentoida tämä kaikki verkkoon. Loput vastaukset joudun katsomaan täältä: https://docs.cycubix.com/web-application-security-essentials/solutions
Sen verran ennätin seuraavaa tehtävää lukemaan, että oleellista on minkä tyyppistä dataa käsitellään, numeroita vai stringejä. Palaan SQL-harjoitteisiin ja WebGoatin SQL-injektio-osuuteen tuorein silmin toisena päivänä. Ensimmäinen tehtäväraportti päättyy tähän.
WG & SQL Injections jatko
Jatkoin harjoitusta ja ymmärsin SQL:stä enemmän: puolilainausmerkki (‘) eli heittomerkki merkitsee SQL:ssä Stringiä ja lainausmerkki (“) SQL-kyselyn rajausta.
Myös seuraava tehtävä onnistuu tämän ymmärtämisen ansiosta.
Mutta viimeisen harjoituksen ratkaisun joudun jälleen katsomaan esimerkistä. Yritin ratkaista sen näin: '; DROP TABLE access_log
mutta oikea ratakisu oli '; DROP TABLE access_log; --
Joudun vielä palaamaan tuohon kommenttikohtaan materiaaleissa ja siihen mikä merkitys sillä on ratkaisussa. Eli koska viimeisessä tehtävässä en tiennyt millainen kyselyn rakenne on en osannut pitää sen loppua oleellisena, joka kommentoitiin pois --
. Katsotaan selviääkö tunnilla kuinka SQL-queryjen rakenteen voi selvittää WebGoatin tehtävissä.