Jak włamać się na stronę internetową – atak SQL Injection.

Tym razem artykuł związany z bezpieczeństwem aplikacji internetowych, a dokładnie opis ataku SQL Injection, który wykorzystywany do dziś umożliwia przejęcie danych logowania na niezabezpieczonej stronie internetowej, lub wykonanie niemal dowolnej operacji na bazie danych. Dowiedz się w jaki sposób można dokonać ataku na stronę internetową i wydobyć informacje o loginach i hasłach użytkowników. Dowiedz się jak sprawdzić podatność strony internetowej na atak SQL Injection.

atak-na-strony-internetowe Jak włamać się na stronę internetową - atak SQL Injection.Źródło: pixabay.com, geralt

Atak SQL Injection – metoda ataku na strony internetowe

Na wstępie chciałbym napisać, że artykuł ma służyć tylko i wyłącznie do celów edukacyjnych i zwiększenia waszej wiedzy o zagrożeniach związanych z atakami na strony i aplikacje internetowe.

SQL Injection to metoda ataku komputerowego polegająca na wykorzystaniu luki w zabezpieczeniach opierającej się na niedostatecznym filtrowaniu danych wprowadzanych przez użytkownika. Innymi słowy programista nie przewidział sytuacji, w której użytkownik będzie chciał wprowadzić wartość inną niż oczekiwaną.

Załóżmy, że mamy formularz do wypełniania, w którym proszą nas o podanie kwoty niezbędnej do zrealizowania przelewu (pole kwota). Większość użytkowników w polu kwota wprowadzi wartość liczbową, na przykład 1000, 1500, 200.50, itp., ale całkiem prawdopodobne, że wśród użytkowników znajdzie się taki, który postąpi inaczej i w tym polu wpisze dowolnie inny ciąg znaków, na przykład sto, dwieście, tysiąc pięćset. Bez odpowiedniego filtrowania skrypt będzie próbował przetworzyć wpisaną przez użytkownika wartość, co spowoduje nieoczekiwany rezultat – na przykład pojawienie się błędu (tzw. wyjątku).

Tego typu sytuacje są szczególnie niebezpieczne, ponieważ umożliwiają przejęcie kontroli nad aplikacją, w tym między innymi uzyskanie informacji, których nie powinniśmy poznać (loginy, hasła użytkowników).

Atak SQL Injection – logowanie na konto administratora

Spora liczba stron internetowych posiada formularz umożliwiający logowanie użytkowników. Po wprowadzeniu danych wysyłane jest zapytanie do bazy danych, które sprawdza, czy użytkownik o danym loginie i haśle istnieje.

Przykładowe zapytanie dla danych (login: Przemo, hasło: 12345) będzie miało postać:

SELECT * FROM users WHERE login = ‘Przemo’ AND pass = ‘12345’

Dane zostaną zwrócone, jeżeli rzeczywiście istnieje użytkownik Przemo, dla którego zostało zdefiniowane hasło 12345 – warunkuje to operator relacji AND.

Zobaczmy co się stanie, jeżeli spróbujemy zalogować się na konto administratora (zazwyczaj loginem jest Admin):

SELECT * FROM users WHERE login = ‘Admin’ AND pass = ‘12345’

Jeżeli znamy hasło na konto administratora, to zapytanie zwróci poprawne dane, ale zakładając, że nie znamy hasła pojawi się komunikat o wpisaniu błędnych danych logowania.

Zobaczmy co się stanie, jeżeli programista nie zadbał o odpowiednie filtrowanie wprowadzonych danych. W formularzu logowania spróbujemy wpisać login jak poprzednio (Admin), natomiast w miejscu hasła wstawimy fragment kodu: 12345’ OR ‘1’ = ‘1’

Całe zapytanie będzie miało postać:

SELECT * FROM users WHERE login = ‘Admin’ AND pass = ‘12345’ OR ‘1’ = ‘1’

Nieważne jakie hasło wpiszemy, to zostaniemy zalogowani na koncie Admin, ponieważ spełniony został drugi z warunków, gdzie 1 = 1.

Osoba, która odkryła tego typu lukę na stronie internetowej może zrobić niemal dowolną czynność po stronie bazy danych – zmienić treść artykułów, usunąć tabelę, dodać nowych użytkowników z uprawnieniami administratora itp.

Obrona przed SQL Injection

Wiem, że tego typu wpis może okazać się kontrowersyjny, dlatego nie będę pokazywał na realnym przykładzie jak działa tego rodzaju atak – w Internecie znajdziecie mnóstwo stron, służących do testowania (specjalnie przygotowanych do tego celu).

Poniżej omówię, w jaki sposób można się bronić przed tego rodzaju atakami. Podstawowa zasada – jeżeli korzystamy z gotowych rozwiązań i CMS’ów na przykład WordPress to pamiętajmy o aktualizacji zarówno silnika, oraz wszystkich wtyczek, z których korzystamy. Nie instalujmy również przestarzałych dodatków, a zwłaszcza takich, które pochodzą z niewiadomego źródła.

Atak SQL Injection opiera się głównie na braku odpowiedniego filtrowania danych wejściowych, dlatego powinniśmy skupić się na tym jaki zestaw znaków może wprowadzić użytkownik w różnego rodzaju formularzach udostępnianych na naszej stronie internetowej.

Jeżeli oczekujemy od użytkownika wartości numerycznych korzystajmy z funkcji: is_numeric()

Aby usunąć znaki specjalne wprowadzone przez użytkownika (‘, ” itp.) warto przepuścić je przez fukcję: addslashes()

3 thoughts on “Jak włamać się na stronę internetową – atak SQL Injection.

  1. Szkoda, że w XXI wieku nie wymyślono nic co by gwarantowało 100% pewność braku włamu. Jak się okazuje o to nietrudno, wielu robi to dla zabawy a nie dla zysku.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.