HAKATEMIA
03Injektiotekniikat

(MySQL) WHERE-käskyjen muuttaminen auktorisoinnin ohittamiseksi

Helppo10MIN

Luottokorttinumeroita!

SQL:ää käytetään käyttäjien tunnistamisen lisäksi moneen muuhunkin asiaan, joista yksi on pääsynhallinta.

Jos vaikka ollaan tunnistettu että käyttäjä on Masa, ja Masa menee verkkopankissa sivulle "Luottokorttisi", miten sivu osaa näyttää juuri Masan luottokortit, eikä vaikkapa naapurin Veeran, jolla on myös tili samassa pankissa?

Yleensä vastaus on, että tietokannassa olevat luottokortit on yhdistetty tiettyyn käyttäjään jonkinlaisen id-kentän avulla, ja sovellus hakee sitten koodissaan sivustolla näytettäväksi vain kortit joiden tunniste (user_id, tms) vastaa kirjautuneen käyttäjän tunnistetta.

Voit kokeilla tätä selaimessa. Tässä on kysely joka palauttaa ihan kaikki luottokortit:

SQL Playground

Ja tässä on kysely joka palauttaa vain käyttäjän numero 1 luottokortit.

SQL Playground

Mutta mitä jos hyökkäjä pääseekin injektoimaan SQL:ää WHERE-lausekkeen perään?

SQL Playground

Lisäämällä WHERE-lausekkeen perään ehdon joka palauttaa myös jokaisen rivin jonka kohdalla 1 on 1, palautuukin tietokannasta jokainen rivi.

Tämän moduulin labrassa on juuri tällainen tilanne. Sovellus antaa käyttäjän suodattaa omia luottokorttejaan kortin numeron perusteella, käyttäen LIKE-lauseketta.

SQL Playground

Keksitkö mitä voisit lisätä LIKE-ehdon sisään yllä olevassa kyselyssä jotta saat sovelluksen palauttamaan kaikki kortit? Kun keksit, avaa labra ja mene "Credit Cards" (luottokortit) sivulle, ja koita saada kaikkien pankin asiakkaiden luottokortit ulos.

1 / 2
Hakatemia Pro

Hakkeroinnin oppiminen alkaa tästä

Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.