SQL injection: úvod do problematiky

Niekedy (hlavne kvôli neskúsenosti programátora) sú niektoré databázy ohrozované tým, že môžeme v nej použiť hackerskú metódu SQL injection. Tento článok je úvodom do tejto problematiky.

Čo je to SQL injection?

SQL injection je hackerská metóda ktorá využíva nedostatky (chyby programátora) v kontrole vstupných dát k tomu aby mohol hacker podstrčiť namiesto očakávaných informácií vlastné a prebrať tak kontrolu nad databázou nad rámec svojich práv. Tým prebraním kontroly je myslená úplná kontrola nad databázou kde hacker môže databázu kopírovať, mazať, pridávaťľubovoľné údaje alebo kradnúť dôležité informácie.

Kontrola vstupu

Kontrola vstupu býva často kameňom úrazu mnohých programátorov. Platí pravidlo: "Neverte údajom od užívateľa!". A práve toto je zdrojom najčastejších útokov a problémov. K problémom s SQL injection nastáva vtedy keď sa nestaráme poriadne (alebo vôbec) o informácie ktoré má obdržať náš SQL dotay z adresy URL. Napríklad: Script očakáva číslo ale vy mu pošlete písmeno, v prípade že script nevie na túto situáciu pružne reagovať zobrazí chybovú hlášku ktorá môže byť znakom, že niečo nieje v poriadku.

Ako na to?

Pozrite sa na nasledujúcu (vymyslenú) adresu:
http://www.adresa.sk/clanky.php?id=1
Na tejto adrese sa nachádza súbor clanky.php ktorý podľa hodnoty (čísla) v premennej ID zobrazuje konkrétne články.

Ako odtestovať SQL injection?

V prvom rade skúste manipulovať s hodnotou premennej ID v parametri adresy URL, napríklad:
http://www.adresa.sk/clanky.php?id=2
http://www.adresa.sk/clanky.php?id=3
http://www.adresa.sk/clanky.php?id=4
Ak články s takýmto ID existujú a sú dostupné mali by sa nám zobraziť. To nieje nič zvláštne ale teraz skúsime ako si script poradí keď dostane nečíselné (neočakávané) parametre. Na príkladovaj adrese skúste zadať namiesto čísla nečíselnú hodnotu prípadne ukončiť dotaz úvodzovkou, napríklad:
http://www.adresa.sk/clanky.php?id=xxx
http://www.adresa.sk/clanky.php?id='
V prípade, že script nemá ošetrený vstup a chybové hlásenia mala by sa zobraziť varovná správa. Pre hackera to môže byť dobré znamenie že na stránke sa dá prevádzkovať SQL injection (pre dotyčný web je to však zlá správa).

Teraz skúsime konkrétny spôsob ako pomocou SQL injection vypísať všetky dostupné články, zápis a tva adresy by vyzeral nejak takto:
http://www.adresa.sk/clanky.php?id=1 or 1=1
V prehliadači sa medzery premenia na %20 a adresa bude vyzerať nejak takto:
http://www.adresa.sk/clanky.php?id=1%20or%201=1
Ak SQL injection funguje tak by sa mali vypísať úplne všetky dostupné články. V dotaye sa nasledujúci zápis prejaví napríklad ako:
SELECT * FROM moje_clanky WHERE id_clanku = ID OR 1=1
Toto bude mať za následok vypísanie všetkých dostupných článkov pretože nech už bola hodnota ID akákoľvek podmienka 1=1 bola splnená. Zápis OR 1=1 je tzv. večná pravda ktorou si môžete odtestovať SQL injection v praxi. V prípade, že večná pravda funguje tak dotyčná stránka má "dosť veľký problém" a je len otázkou času kedy to objaví niekto kto vie čo s tým. Možnosti SQL injection sa neobmedzujú len na vypisovanie všetkých článkov, vy totiž môžete databázu ľubovoľne upravovať, kopírovať, mazať prípadne kradnúť dôležité informácie.

O ďalších možnostiach SQL injection sa dočítate niekedy v ďalšom pokračovaní článku.



Podobné články

Pridať komentár

4 Komentárov

  1. igor hovorí:

    super, funguje to :)

  2. frelancer hovorí:

    odkopcene z knihy ktoru som dnes drzal v ruke, autor nedal dotoho nic vlastne...o ako injections to trepes? kde ja naznak kopirovania? aha v inom clanku ktory si v zivote nanapisal .....

  3. Peter Oravec hovorí:

    nic nieje odkopcene, ide o to ze o SQL injection sa neda pisat rozdielne lebo to ma presny postup... cele je to len o osetreni vstupov... zvysku tvojho komentara nerozumiem ;-)

  4. simona hovorí:

    a mne sa nahodou paci tento web :P

Facebook komentáre ()

Napíš komentár