SQL-Injektio

(MySQL) Skeeman rakenteen selvittäminen

Helppo
30 min

Mitä jos emme tiedäkään tietokannan rakennetta?

Jos tiedämme etukäteen, että tietokannassa on user-taulu, jossa on email- ja password-sarakkeet, hyökkäyksen tekeminen voi olla aika helppoa. Aina ei kuitenkaan voi tietää etukäteen, miltä tietokannan rakenne näyttää, joten opetellaan keinot sen selvittämiseen.

Käytetään selvittämisessä UNION-tekniikkaa, jota kannattaa tehokkuutensa takia hyödyntää aina kun se on mahdollista.

Aloita avaamalla harjoitus sivun alareunasta ja menemällä luottokorttisivulle, kuten edellisessäkin moduulissa.

Kolumnien määrän päättely

Muistin virkistykseksi selvitetään taas ORDER BY -tekniikalla sarakkeiden määrä.

ORDER BY 1--
ORDER BY 2--
...
ORDER BY 9-- 

Yhdeksännen sarakkeen mukaan järjestäminen aiheuttaa virheen, joten voimme päätellä, että sarakkeita on kahdeksan.

Reflektiopisteen selvittäminen

Reflektiopisteen, eli kohdan sivulla/HTTP-vastauksessa, johon saat näkymään tietokannasta haetun sarakkeen tai sarakkeita, voit saada näppärästi selville hakemalla alla olevan kaltaisen rivin tietokannasta.

UNION SELECT 111,222,333,444,555,666,777,888--

Sitten tiedät, että esimerkiksi seitsemäs sarake on sellainen jonka saat sovellukselta takaisin. Yksi tällainen sarake riittää hyökkäyksen tekemiseen.

Tietokannan version selvittäminen

MySQL-tietokannoissa voit hakea tietokannan version hakemalla arvon @@version.

Tietokannan hakeminen

Tietokantapalvelimella voi olla monta eri tietokantaa. Voit selvittää tietokannan nimen arvolla database().

Tietokantataulujen hakeminen

MySQL-tietokannassa on aina erityinen järjestelmätaulu, jonka nimi on information_schema. Taulu ei sisällä sovelluksen dataa, vaan pitää sisällään tietoja tietokannan skeemasta, eli tietokannan rakenteesta. Taulu on äärimmäisen hyödyllinen hyökkääjälle.

Tarkoituksenasi on käyttää UNION-tekniikkaa samalla tavalla kun käytit sitä aiemmissa moduuleissa käyttäjätunnusten varastamiseen, mutta UNION-kysely, jonka haluat ajaa, on seuraavanlainen: Näytä information_schema.tables -taulusta sellaisten rivien table_name jonka table_schema on nykyinen tietokanta, eli database():

SELECT table_name FROM information_schema.tables WHERE table_schema = database()

Tietokantasarakkeiden hakeminen

Jos haluat selvittää taulun sarakkeet, hae column_name -sarake information_schema.columns -taulusta ja laita ehdoksi, että näytetään vain sarakkeet, joiden table_name on haluamasi taulu (alla oleva esimerkki ei toimi suoraan koska taulujen nimet arvotaan tässä labrassa).

UNION SELECT column_name FROM information_schema.columns WHERE table_name="goag_creditcard"

MySQLi - Skeeman selvitys

Tässä labrassa pääset harjoittelemaan MySQL-tietokannan skeemarakenteen selvitystä.

Tavoite

Aja SQL-kysely joka palauttaa tietokannan taulut. On suositeltavaa, mutta ei pakollista, harjoituksen vuoksi tehdä myös kysely joka palauttaa haluamasi taulun sarakkeet.

Tehtävät

Flag

Löydä lippu (flag) labraympäristöstä ja syötä se alle.

hakatemia pro

Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.

Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.