HAKATEMIA
02Injektiotekniikat

(MySQL) WHERE-käskyjen muuttaminen tunnistautumisen ohittamiseksi (tietty käyttäjä)

Helppo10MIN

Viime moduulissa opimme, kuinka ohjelmointivirhe voi johtaa siihen että hyökkääjä pääsee muokkaamaan sovelluksen tekemien SQL-kyselyiden rakennetta.

Teimme harjoituksen, jossa ohitimme kirjautumisen pakottamalla tietokanta palauttamaan kaikki käyttäjärivit salasanasta riippumatta, jolloin sovellus kirjasi meidät sisään ensimmäisenä käyttäjänä, joka sattui olemaan järjestelmänvalvoja.

Mutta mitä, jos haluammekin kirjautua eri käyttäjänä? Tällöin meidän täytyy lisätä kyselyn WHERE-lausekkeeseen ehtoja, jotka ohjeistavat tietokannan palauttamaan jokaisen käyttäjän sijasta vain halutun käyttäjän.

Jos tietäisimme järjestelmänvalvojan sähköpostiosoitteen, voisimme lähestyä ongelmaa esimerkiksi injektoimalla **' OR email='[email protected]'-- **jolloin muodostuisi SQL:

SQL
1SELECT * FROM user WHERE email='[email protected]' AND password='foo' OR email='[email protected]'-- '

Emme kuitenkaan tiedä järjestelmänvalvojan sähköpostiosoitetta. Sen sijaan tiedämme, että tietokannassa on sarake nimeltä admin joka on boolean muotoinen, eli sen arvo on True (tosi) tai False (epätosi).

Meidän pitäisi siis pystyä kirjautumaan järjestelmänvalvojana sisään, kunhan varmistamme että kysely palauttaa vain sellaiset rivit joiden admin-sarakkeen arvo on True. Kokeile alla olevaa harjoitusta, ja yritä saada sovellus ajamaan tämänkaltainen kysely.

SQL
1SELECT * FROM user WHERE email='[email protected]' AND password='foo' OR admin=True-- '
1 / 2
Hakatemia Pro

Hakkeroinnin oppiminen alkaa tästä

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