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()

Przeczytaj również

Jak usunąć reklamy w KMPlayer ? KMPlayer pozbywamy... Jak pozbyć się reklam w programie KMPlayer ? Usuwanie reklam z KMPlayer. The KMPlayer to obok AllPlayera jeden z najpopularniejszych programów do od...
Automatyczne wykonywanie zrzutu ekranu. Wtyczka do... Wykonywanie zrzutu ekranu. Jak działa Fireshot - wtyczka do zrzutów ekranu. Zrzut ekranu wybranego fragmentu na stronie internetowej - to proste ! Ba...
Szybszy WordPress, czyli skuteczny sposób na popra... Jeżeli Wasz blog, lub strona internetowa oparta o WordPress wczytuje się zbyt wolno, to prawdopodobnie jest źle, lub co gorsza w ogóle nie jest zoptym...
Darmowe czcionki na stronę internetową. Bezpłatne ... Google udostępnia potężną bazę krojów czcionek, które możemy wykorzystać na własnej stronie internetowej. Zaletą Google Fonts jest to, że czcionek nie...

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 email nie zostanie opublikowany.