(MySQL) WHERE-käskyjen muuttaminen auktorisoinnin ohittamiseksi
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:
Ja tässä on kysely joka palauttaa vain käyttäjän numero 1 luottokortit.
Mutta mitä jos hyökkäjä pääseekin injektoimaan SQL:ää WHERE-lausekkeen perään?
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.
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.
Hakkeroinnin oppiminen alkaa tästä
Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.