OWASP:in (Open Web Application Security Project) Top 10 -listaus listaa muutaman vuosien välein 10 yleisintä haavoittuvuutta web-sovelluksissa, ja miten niitä voidaan välttää. Tässä käsitellään ja tiivistetään vuoden 2017 listaa, joka löytyy tästä osoitteesta.
Injektiohyökkäyksissä käyttäjän syöttämää dataa käsitellään eri tavalla, kuin sovelluksen pitäisi sitä käsitellä. Esimerkiksi yleisessä SQL-injektiossa käyttäjä syöttää sivulle esim. käyttäjänimen tai salasanan sijaan SQL-kyselyn, jonka sivu suorittaa. Tälläisessä tilanteessa käyttäjä voi päästä näkemään tai jopa muokkaamaan tietokannan sisältöä.
Taustalla sivu voi syöttää esimerkiksi salasanan SQL-kyselyyn käyttäjän syötteen perusteella seuraavasti:
WHERE username = 'user' AND password = '*KÄYTTÄJÄN SYÖTE*'
Jos käyttäjä syöttääkin tähän kenttään heittomerkin siten, että kysely näyttää seuraavalta:
WHERE username = 'user' AND password = asdf' OR 1=1
Käsittelee tietokanta pyynnön niin, että jos salasana on oikein (jota se ei ole) TAI 1=1 on totta (jota se on), voidaan käyttäjä päästää sisään.
Rikkinäinen tai huono autentikointi on toinen yleinen haavoittuvuus. Siinä autentikointijärjestelmä on jollain tavalla heikko siten, että ulkopuolinen hyökkääjä voi päästä käsiksi toisen käyttäjään.
Yleisiä esimerkkejä tästä ovat mm.
Tämä ongelma käsittää kaikkea sisältöä ja dataa, joka sivulta on saatavilla helposti ulkopuoliselle. Esimerkiksi suojaamaton HTTP-yhteys voi paljastaa käyttäjän salasanan, jos se lähetetään sivulle.
Yleisiä esimerkkejä tälläisestä haavoittuvuudesta ovat mm.
Cross Site Scripting (XSS) on yleinen haavoittuvuus, jossa hyökkääjä voi saada käyttäjän suorittamaan sivulla hyökkääjän omaa koodia sivun oman koodin lisäksi. Tämä voi antaa mahdollisuuden myös lisätä sivulle uutta sisältöä, jota siellä ei pitäisi olla.
Yleisiä esimerkkejä tästä ovat mm.
Reflected XSS -hyökkäyksellä tarkoitetaan Cross site scripting -hyökkäystä, jonka tekemät muutokset ovat näkyvillä sivulla. Näitä voivat olla esim. sivulle lisätty kuva, tai vaikka alert().
Stored XSS -hyökkäyksessä hyökkääjän kirjoittama koodi jää pysyvästi sivun muistiin, ja se voidaan ajaa esim. jokainen kerta kun sivu ladataan. Esimerkkejä tästä ovat mm. kommentit, sivun otsikot tms.
Voit estää selainta ajamasta JavaScriptiä selaimen asetuksista. Tämä kuitenkin voi vaikeuttaa modernin internetin käyttöä. Parempi tapa on käyttää esimerkiksi selaimen lisäosaa, joka estää uusilla sivuilla JavaScriptin ajamisen, ennen kuin käyttäjä on hyväksynyt sen. __
Hypoteettisessä tilanteessa sosiaalisen median X ylläpitäjällä on käyttäjällään mahdollisuus poistaa muiden ihmisten kommentteja, ja tehdä muita toimintoja, joita muut eivät. Tämä toiminnallisuus on ainoastaan hänen käyttäjällään, jonka sessio vahvistetaan käyttämällä selaimessa olevaa keksiä.
Hyökkääjä saakin tietää, että sivun X viestitoiminnossa on XSS-haavoittuvuus, jonka kautta hän voi yhdistää viestiinsä JavaScript-koodia, joka ajetaan laitteella kun viestin avaa. Hyökkääjä lähettääkin ylläpitäjälle viestin, jossa on on viestin lisäksi upotettuna koodia, joka kopioi sessiokeksin selaimen muistista, ja lähettää sen hyökkääjän palvelimelle.
Hyökkääjä odottaa, kunnes ylläpitäjä avaa viestin, jolloin hänen palvelimensa vastaanottaa keksin, jonka jälkeen hän voi tallentaa ylläpitäjän sessioavaimen omaan selaimeensa, ja avata sivun, saaden näin pääsyn ylläpitäjän käyttäjälle.
Tässä tapauksessa ylläpitäjä ei olisi voinut melkein mitenkään estää hyökkäyksen tapahtumista, jos hän ei olisi tiennyt haavoittuvuuden olemassaolosta. Javascript-koodi saattaisi olla esimerkiksi upotettuna kuvaan, joten sitä ei ehkä edes näkisi viestissä.
SQLZoo on sivu, jossa voi harjoitella SQL-kielen käyttöä ja kyselyiden kirjoittamista. Ratkaistaan sivulta kohdat 0 ja 2
Tehtävät alkavat melko helppoina, sillä niissä vain muokataan jo valmiiksi kirjoitettua SQL-kyselyä.
1.
2.
3.

Tässä tehtävässä siirrytään tutkimaan tarkemmin aikaisemmin jo käytettyä WORLD taulua. Tällä kertaa kyselyt joissain kohdissa kirjoitetaan itse.
1.

2.

Tässä kohdassa jouduimme itse kirjoittamaan kyselyn, sekä tekemään simppelin laskutoimituksen, sillä taulukossa oli ainoastaan gdp, eikä gdp per capita.

Tässäkin teemme simppelin laskutoimituksen, että saamme asukasluvun miljoonissa.

Viimeisessä kohdassa kirjoitamme kyselyn, joka palauttaa vain IN-komennon sisällä olevat maat.

Nyt olemme oppineet hieman, miten SQL-kieli toimii, jotta käyttää näitä taitoja SQL-injektioihin.
Metasploitable 2:n mukana tulee myös Damn Vulnerable Web Application (DVWA). Tämä on web-sovellus, jossa voi harjoitella monia erilaisia web-hyökkäyksiä.
Löydämme DVWA:n Kali-koneellamme menemällä Metasploitable 2:n osoitteeseen ja siirtymällä /dvwa -hakemistoon. Seuraavaksi voimme kirjautua sisään käyttäjätunnuksella admin ja salasanalla password.

Vaihdetaan Security Level -asetus High:sta Low:hun, jotta murtautuminen on hieman helpompaa.

Tässä tehtävässä löydämme ping-työkalun, jolla voimme pingata erilaisia kohteita, kuten näemme:

Tämä näyttäisi suoraan olevan linux-terminaalin output, joten yritetään ajaa jokin toinen komento.

Tämä ei toiminutkaan, joten uskon, että sivu on toteutettu siten, että konsolissa on aloitettu ping-komento, johon ip-osoite otetaan syötekentästä. Meidän pitää vain saada “karattua” ping-komennon sisältä, että voimme ajaa omia komentojamme.

Annoin ping-komennolle osoitteen “localhost”, jonka jälkeen putkitin komennon jälkeen toisen komennon. Tällä kertaa toinen komento suoritettiin, kuten halusimme.
Nyt voimme tehdä helposti reverse shellin ja saada komentoriviyhteyden koneeseen.

Käytin tässä jälleen pentestmonkey-sivulta löytyvää cheat sheettiä, josta tällä kertaa valitsin PHP:lla toimivan reverse shellin, sillä tiedän DVWA:n olevan PHP:lla toteutettu.
Tämä osuus keskittyy simppeleiden SQL-injektoiden ymmärtämiseen ja tekemiseen.
Ensin harjoitellaan SQL-kielen käyttöä:

Sitten opetellaan muokkaamaan dataa SQL-kielellä:

Ja miten lisätään dataa:

Miten hallitaan käyttöoikeuksia tietokantaan:

Nyt voimme tehdä ensimmäisen SQL-injektiomme:

Seuraavaksi voidaan tehdä sama numeroilla:

Nyt voimme yhdistellä laajentaa WHERE-komentoa saadaksemme dumpattua koko databasen:

Voimme muokata palkkaa SQL-kielellä:
3SL99A'; UPDATE employees SET salary = 99999 where last_name = 'Smith

Lopuksi vielä poistetaan access_log taulu
'; DROP TABLE access_log;--

Tässä tehtävässä tutustutaan siihen, miten huonosti toteutettu 2FA:n kautta tehty salasanan resetointi voidaan rikkoa, vastaamatta “turvakysymyksiin”.
Syötetään ensin turhat vastaukset ja pysäytetään request Burpsuitella:

Kokeilin poistaa secQuestion-kohdat, kuten sivun tarinassa, mutta se ei toiminut.

Seuraavaksi vaihdoin kohtien numerot, sillä ajattelin jos vastaankin olemattomiin kohtiin, jokainen “vastaus” on oikein :D

Tämä toimi, ja pääsin tehtävän läpi!
Tässä tehtävässä tutkitaan turvatota kirjautumisjärjestelmää, jossa suojaamaton kirjautumisyritys voidaan pysäyttää pakettisnifferin, tai tässä tapauksessa selaimen dev toolsin avulla. Vaihtoehtoisesti tässä voitaisiin käyttää wiresharkkia.

Tässä tehtävässä tutustutaan cross site scriptingiin ja miten sitä voidaan käyttää pentestauksessa.
Tässä kohdassa selvitämme, miten esimerkiksi selaimen sessiokeksi voidaan saada suorittamalla javascriptiä. Tämä keksi ei muutu, vaikka avaisi uuden välilehden. Tämä tarkoittaa että sen varastamalla voisin esittää tätä aikaisempaa “käyttäjää”

Tässä kohdassa etsimme formista kokeilemalla kohdan, jota ei ole suojattu XSS-hyökkäykseltä. Saamme simppelillä alert()-skriptillä selaimen näyttämään alertin.

Seuraavaksi tutkitaan CSRF-hyökkäyksiä, joissa voidaan esittää toista käyttäjää ja hänen selaintaan.

Tässä tehtävässä meille annetaan sivu, johon tehtävän POST-pyynnön pitää tulla toisesta kohteesta, kuin omasta selaimestamme. Tutkin tätä sivua ja POST-pyyntöä ensin selaimen dev toolsseilla:

Sen jälkeen loin nopeasti nettisivun, joka lähettää juuri nuo formissa pyydetyt tiedot osoitteeseen:

Seuraavaksi avasin tämän html-tiedoston, ja sain flagin.

Seuraavassa tehtävässä meidän pitää tehdä sama asia, mutta tällä kertaa lähettää formin data niin, että se lähettää kommentin sivulle.
Voimme tehdä tämän helposti tutkimalla ensin lähetettävää POST-pyyntöä, ja sitten muokkaamalla viime kohdassa luomaamme exploit.html -sivua.

Tässä näemme, mitä dataa Post-pyyntö lähettää, nyt vain muokkaamme oman exploittimme lähettämään samannimiset kohdat!

Nyt voimme jälleen avata sivun ja lähettää pyynnön:

Tehtäväsivu (terokarvinen.com)
Percival & Samancioglu 2020: The Complete Ethical Hacking Course - XSS