Wykorzystanie zapytań SQL - atak na stronę www
SQL od podstaw - proste zapytania i sposoby wykorzystania
(sql injection - luki w zabezpieczeniach)
Poznaj wroga i pokonaj go - obrona przed sql injection !
Poznaj wroga i pokonaj go - obrona przed sql injection !
flickr, BlatantNews.com
Tym razem nieco teoretycznie i praktycznie - dla tych, którzy nie bardzo zrozumieli wcześniejsze artykuły o sql injection - czyli atakach na niezabezpieczone strony internetowe.
Na wstępie trochę o tym czym jest właściwie SQL - jest to język, który służy do tworzenia zapytań do bazy danych( możemy tworzyć, modyfikować i usuwać pewne rzeczy).
Przykład : mamy stronę internetową z wypożyczalnią książek, baza danych to min. lista książek, dzięki zapytaniom do naszej bazy danych możemy dodać nowy tytuł książki, usunąć albo zmodyfikować inne tytuły itp... oczywiście możemy także wyświetlić dostępne książki, posegregować je, zobaczyć kto ile wypożyczył itp...
Wrócę jednak nieco do tematu słabo zabezpieczonych stron - a mianowicie co dzięki temu możemy uzyskać.
A więc gdy nasza baza danych zawiera min. informacje o loginach i hasłach, albo adresach email i numerach telefonów to możemy np. wyświetlić listę użytkowników - poznać ich numery telefonów, loginy itp.... możemy nawet zalogować się na ich konto !
Oczywiście - i tutaj muszę przestrzec - artykuł ten służy wyłącznie celom edukacyjnym i nie należy łamać zabezpieczeń cudzych stron gdyż jest to nie zgodne z prawem - chyba że robimy to za zgodą administratora strony !
A więc zabawę czas zacząć !
Oczywiście musimy przewidzieć w jaki sposób zachowuje się skrypt na stronie internetowej tzn. co jest pobierane i przekazywane do bazy danych.
Przyjrzyjmy się jednemu z popularnych zapytań do bazy danych :
SELECT login FROM uzytkownicy WHERE login='' AND haslo=''
Zapytanie to oznacza : wybierz kolumnę login z tabeli użytkownicy, gdzie login = ' ' i haslo = ' '
A więc np. mając jakiś formularz logowania na stronie internetowej, gdy podamy login i hasło zapytanie przyjmie postać :
SELECT login FROM uzytkownicy WHERE login='pececik' AND haslo='testowe'
Jak widzimy aby się zalogować poprawnie należy podać login i hasło ponieważ całe zapytanie tego wymaga !
Jest jednak sposób aby ominąć hasło i za pomocą samego loginu spróbować się zalogować na stronę.
W SQL jak i w innych językach programowania jest coś takiego jak znak komentarza - czyli coś takiego po czym programista może dowolnie pisać, a kod i tak nie ulegnie wykonaniu (po znaku komentarza nic się nie wykona). Tutaj możemy z tego skorzystać i zakomentować nasze hasło, zobaczmy :
SELECT login FROM uzytkownicy WHERE login='pececik' /* AND haslo='testowe'
Jak widzicie, dodałem tylko znaczek /* po naszym loginie - oznacza on że część przeznaczona na hasło (AND haslo='testowe') jest zakomentowana - czyli nie brana pod uwagę a więc nasze zapytanie w rzeczywistości to :
SELECT login FROM uzytkownicy WHERE login='pececik' /* ..............................................
Innym zapytaniem może być wykorzystanie LIKE :
SELECT login FROM uzytkownicy WHERE login LIKE = '' AND haslo LIKE =''
Like po prostu sprawdza pewien wzorzec - ponadto jest bardzo pomocne, gdyż nie musimy znać np. pełnego loginu aby wyświetlić listę osób na literę P.
Dzięki zapytaniu z LIKE możemy prowadzić znak procenta % - znak ten służy do zastępowania dowolnego ciągu.
Przyjrzyjmy się na przykładzie :
SELECT login FROM uzytkownicy WHERE login LIKE = 'pec%' AND haslo LIKE ='testowe'
pec% - oznacza że pierwsze 3 litery użytkownika to pec, a kolejne są dowolnego ciągu np. pececik, pecetowiec, pecet itp...
A co by się stało gdybyśmy w ten sposób zrobili z hasłem np :
SELECT login FROM uzytkownicy WHERE login LIKE = 'pececik' AND haslo LIKE ='%'
Jak wiemy znak % zastępuje dowolny ciąg znaków - w tym przypadku zastąpi nam poprawne hasło ! Oczywiście powinniśmy zostać poprawnie zalogowani na stronę jako użytkownik pececik !
To na razie tyle - więcej za jakiś czas : warto przetestować to co tutaj napisałem , jesteście w stanie przejść pierwszy poziom w grze : http://sqltest.uw-host.org/sql2.php , to strona podatna na atak sql injection !
Warto zastanowić się w jaki sposób działa ten mechanizm i odpowiednio zabezpieczyć się przed nim : http://pececik.blogspot.com/2010/06/ochrona-przed-sql-injection-obrona.html
2 komentarze:
może to i proste, ale u mnie nie idzie wcale:(
Nikt nie pisał, że będzie łatwo - sam sql trzeba zrozumieć - trzeba wiedzieć jak zbudowana jest baza danych.
Prześlij komentarz